@net-mesh/browser 0.37.1 → 0.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +48 -0
- package/dist/errors.d.ts +7 -1
- package/dist/errors.js +15 -7
- package/dist/events.d.ts +6 -0
- package/dist/events.js +13 -0
- package/dist/index.bundle.js +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/net_leaf.d.ts +10 -9
- package/dist/net_leaf.js +53 -40
- package/dist/net_leaf_bg.wasm +0 -0
- package/dist/net_leaf_bg.wasm.d.ts +10 -9
- package/dist/node.d.ts +12 -1
- package/dist/node.js +23 -7
- package/dist/udp-probe.d.ts +68 -0
- package/dist/udp-probe.js +89 -5
- package/package.json +1 -1
package/dist/index.bundle.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var we=class{constructor(e=()=>{}){this.detach=e}detach;buffered=[];waiting=null;ended=!1;push(e){if(this.ended)return;let t=this.waiting;if(t){this.waiting=null,t({value:e,done:!1});return}this.buffered.push(e)}end(){if(this.ended)return;this.ended=!0;let e=this.waiting;e&&(this.waiting=null,e({value:void 0,done:!0}))}next(){let e=this.buffered.shift();if(e!==void 0)return Promise.resolve({value:e,done:!1});if(this.ended)return Promise.resolve({value:void 0,done:!0});let{promise:t,resolve:r}=Promise.withResolvers();return this.waiting=r,t}return(){return this.detach(),this.end(),Promise.resolve({value:void 0,done:!0})}[Symbol.asyncIterator](){return this}};function ot(n,e,t){return!n||!e||t.length===0?null:{bootstrapOk:!0,stunProbeFailed:!0,probed:t}}var z=class extends Error{constructor(e){super(e),this.name="LeafError"}},et=class extends z{constructor(t){super(`wire: ${t}`);this.detail=t;this.name="WireError"}detail;kind="wire"},Oe=class extends z{constructor(t){super(`session: ${t}`);this.detail=t;this.name="SessionError"}detail;kind="session"},tt=class extends z{constructor(t){super(`control plane: ${t}`);this.detail=t;this.name="ControlPlaneError"}detail;kind="control-plane"},ge=class extends z{constructor(t){super(`identity: ${t}`);this.detail=t;this.name="IdentityError"}detail;kind="identity"},nt=class extends z{constructor(t,r){super(`ice configuration: the iceServers entry ${t} names this connection's peer RTC endpoint ${r}; a peer cannot be its own STUN server. Omit iceServers to use the STUN endpoint the anchor announces (the stun_addr field of GET /rtc/anchor), or name a STUN server that is not this peer`);this.entry=t;this.peerRtcAddr=r;this.name="IceServerConflictError"}entry;peerRtcAddr;kind="ice-server-conflict"},rt=class extends z{constructor(t,r=null){super(r===null?`not the leader: this tab holds generation ${t}`:`not the leader: this tab holds generation ${t}, the leader holds ${r}`);this.presented=t;this.current=r;this.name="NotLeaderError"}presented;current;kind="not-leader"},pe=class extends z{constructor(t){super(`rtc: ${wi(t)}`);this.failure=t;this.name="RtcError",this.kind=bi[t.type]}failure;kind},it=class extends z{constructor(t){super(`rpc: ${vi(t)}`);this.failure=t;this.name="RpcError",this.kind=Si[t.type]}failure;kind},Ne=class extends z{constructor(t,r){super(t);this.cause=r;this.name="UnknownLeafError"}cause;kind="unknown"},Q=class extends z{},ue=class extends Q{constructor(t,r){super(r??`org:admission_denied:${gi[t]}`);this.coarse=t;this.name="OrgAdmissionDeniedError"}coarse;kind="org-admission-denied"},xe=class extends ue{kind="org-revoked";constructor(e="org:admission_denied:denied"){super("denied",e),this.name="OrgRevokedError"}},ke=class extends Q{kind="org-timeout";constructor(e="org:rpc:timeout"){super(e),this.name="OrgTimeoutError"}},D=class extends Q{kind="org-cancelled";constructor(e="org:rpc:cancelled"){super(e),this.name="OrgCancelledError"}},Z=class extends Q{constructor(t,r="org:rpc:leader_lost"){super(r);this.generation=t;this.name="OrgLeaderLostError"}generation;kind="org-leader-lost"},Ee=class extends Q{kind="org-session-lost";constructor(e="org:rpc:session_lost"){super(e),this.name="OrgSessionLostError"}},Je=class extends Q{constructor(t,r="org:rpc:indeterminate"){super(r);this.deadlineMs=t;this.name="OrgIndeterminateError"}deadlineMs;kind="org-indeterminate"},Fe=class extends Q{constructor(t,r="org:rpc:refused"){super(r);this.status=t;this.name="OrgRefusedError"}status;kind="org-refused"},ve=class extends Q{kind="org-internal";constructor(e="org:rpc:internal"){super(e),this.name="OrgInternalError"}},We=class extends Q{kind="org-malformed";constructor(e="org:rpc:malformed"){super(e),this.name="OrgMalformedError"}},at="org: the response sink is closed: the call was retired";var Ln="org:",gi={denied:"denied","not-supported":"not_supported",unavailable:"unavailable"};function st(n){let e=(n??"").trim();return e==="unavailable"?"unavailable":e==="not_supported"||e==="not-supported"?"not-supported":e==="\0"||e==="0"?"denied":e===""||e==="1"?"not-supported":e===""||e==="2"?"unavailable":"denied"}function mi(n){switch(n){case"timeout":return new ke;case"revoked":return new xe;case"session-lost":return new Ee;case"leader-lost":return new Z("");case"cancelled":case"node-closed":case"replaced":return new D;case"resource-exhausted":return new ue("unavailable")}}function qt(n){let e=n.message;switch(n.kind){case"admission-denied":return new ue(st(n.coarse),e);case"revoked":return e===void 0?new xe:new xe(e);case"timeout":return e===void 0?new ke:new ke(e);case"cancelled":return e===void 0?new D:new D(e);case"leader-lost":return new Z(n.generation??"",e);case"session-lost":return e===void 0?new Ee:new Ee(e);case"indeterminate":return new Je(n.deadlineMs??0,e);case"refused":return new Fe(n.status??0,e);case"malformed":return e===void 0?new We:new We(e);case"internal":return e===void 0?new ve:new ve(e);default:return new ve(`org:rpc:internal: unrecognized terminal kind ${JSON.stringify(n.kind)}`+(e===void 0?"":`: ${e}`))}}function lt(n){switch(n){case"timeout":case"cancelled":case"revoked":case"session-lost":case"leader-lost":case"node-closed":case"replaced":case"resource-exhausted":return n;default:return"replaced"}}function Tn(n){if(/^org: .+ is closed: the call was retired$/.test(n))return new D(n);if(/^org: .+ is closed: the call's byte budget refused the item and retired the call$/.test(n))return new ue("unavailable",n);if(n.startsWith(Ln)){let t=n.slice(Ln.length),r=t.indexOf(":");if(r<=0)return null;let i=t.slice(0,r),s=t.slice(r+1),o=s.indexOf(":"),a=o===-1?s:s.slice(0,o);if(a.length===0)return null;if(i==="admission_denied")return new ue(st(a),n);if(i!=="rpc")return null;switch(a){case"revoked":return new xe(n);case"timeout":return new ke(n);case"cancelled":return new D(n);case"leader_lost":case"leader-lost":return new Z("",n);case"session_lost":case"session-lost":return new Ee(n);case"indeterminate":return new Je(0,n);case"refused":case"server_error":case"capability_denied":return new Fe(0,n);case"malformed":case"codec_encode":case"codec_decode":return new We(n);case"internal":case"no_route":case"transport":return new ve(n);default:return null}}let e=/^rpc: refused \(9\): ([\s\S]*)$/.exec(n);return e?new ue(st(e[1]),n):null}var bi={iceTimeout:"ice-timeout",udpBlocked:"udp-blocked",channelClosed:"channel-closed",unsupported:"rtc-unsupported"},Si={refused:"rpc-refused",timeout:"rpc-timeout",sessionLost:"session-lost",leaderLost:"leader-lost",indeterminate:"rpc-indeterminate",malformed:"rpc-malformed"},Dn="ICE did not connect inside the deadline (this does not establish that UDP is blocked)";function wi(n){switch(n.type){case"iceTimeout":return Dn;case"udpBlocked":return`UDP appears blocked: the anchor's HTTPS bootstrap succeeded but a STUN binding to ${n.evidence.probed} was unanswered`;case"channelClosed":return`the DataChannel closed: ${n.detail}`;case"unsupported":return`this browser refused the attempt: ${n.detail}`}}function vi(n){switch(n.type){case"refused":return`refused (${n.status}): ${n.message}`;case"timeout":return"the call's deadline elapsed";case"sessionLost":return"the session carrying the call went away";case"leaderLost":return`the leader holding generation ${n.generation} was replaced`;case"indeterminate":return`the local deadline of ${n.deadlineMs}ms elapsed before the tab running the node answered; the remote operation may still have executed (it was not retried)`;case"malformed":return`the reply did not decode: ${n.detail}`}}function S(n){if(n instanceof z)return n;let e=Oi(n);return Mn(e)??new Ne(e,n)}function Oi(n){if(typeof n=="string")return n;if(n instanceof Error)return n.message;if(n!==null&&typeof n=="object"&&"message"in n){let e=n.message;if(typeof e=="string")return e}return String(n)}function Mn(n){let e=Tn(n);if(e!==null)return e;let t=se(n,"rtc: ");if(t!==null){let l=qn(t);return l===null?null:new pe(l)}let r=se(n,"rpc: ");if(r!==null){let l=Nn(r);return l===null?null:new it(l)}let i=se(n,"wire: ");if(i!==null)return new et(i);let s=se(n,"session: ");if(s!==null)return new Oe(s);let o=se(n,"control plane: ");if(o!==null)return new tt(o);let a=se(n,"identity: ");if(a!==null)return new ge(a);let d=se(n,"ice configuration: ");if(d!==null){let l=/^the iceServers entry (.+?) names this connection's peer RTC endpoint (.+?); a peer cannot be its own STUN server\./.exec(d);if(l)return new nt(l[1]??"",l[2]??"")}let c=/^not the leader: this tab holds generation (\d+)(?:, the leader holds (\d+))?$/.exec(n);if(c){let l=Number(c[1]),u=c[2]===void 0?null:Number(c[2]);return new rt(l,u)}return null}function qn(n){if(n===Dn)return{type:"iceTimeout"};let e=/^UDP appears blocked: the anchor's HTTPS bootstrap succeeded but a STUN binding to (.+) was unanswered$/.exec(n);if(e){let i=e[1]??"",s=ot(!0,!0,i);return s===null?null:{type:"udpBlocked",evidence:s}}let t=se(n,"the DataChannel closed: ");if(t!==null)return{type:"channelClosed",detail:t};let r=se(n,"this browser refused the attempt: ");return r!==null?{type:"unsupported",detail:r}:null}function Nn(n){let e=/^refused \((\d+)\): ([\s\S]*)$/.exec(n);if(e)return{type:"refused",status:Number(e[1]),message:e[2]??""};if(n==="the call's deadline elapsed")return{type:"timeout"};if(n==="the session carrying the call went away")return{type:"sessionLost"};let t=/^the leader holding generation (\d+) was replaced$/.exec(n);if(t)return{type:"leaderLost",generation:Number(t[1])};let r=/^the local deadline of (\d+)ms elapsed before the tab running the node answered; the remote operation may still have executed \(it was not retried\)$/.exec(n);if(r)return{type:"indeterminate",deadlineMs:Number(r[1])};let i=se(n,"the reply did not decode: ");return i!==null?{type:"malformed",detail:i}:null}function xi(n){return n instanceof pe&&n.failure.type==="udpBlocked"}function se(n,e){return n.startsWith(e)?n.slice(e.length):null}var $n=["node_id","peer_node","channel_hash","origin_hash","stream_id","dialog","not_after","call_id","seq","generation","incarnation","version","from","to"];function me(n){let e;try{e=ct(n)}catch{return{type:"unknown",tag:null,raw:n}}if(e===null||typeof e!="object")return{type:"unknown",tag:null,raw:e};let t=e,r=typeof t.type=="string"?t.type:null;switch(r){case"connected":return{type:"connected",nodeIdHex:$(t,"node_id_hex"),peerNode:$(t,"peer_node"),rtcAddr:Un(t,"rtc_addr")};case"disconnected":return{type:"disconnected",reason:$(t,"reason")};case"channel_message":return{type:"channel_message",channelHash:$(t,"channel_hash"),originHash:$(t,"origin_hash"),payload:Wt(t,"payload")};case"stream_data":return{type:"stream_data",peerNode:$(t,"peer_node"),incarnation:$(t,"incarnation"),streamId:$(t,"stream_id"),seq:Nt(t,"seq"),payload:Wt(t,"payload")};case"announcement":return{type:"announcement",nodeId:$(t,"node_id"),capabilities:ki(t,"capabilities"),rtcAddr:Un(t,"rtc_addr"),verified:t.verified===!0};case"signal":return{type:"signal",from:$(t,"from"),to:$(t,"to"),dialog:$(t,"dialog"),kind:$(t,"kind"),payload:Wt(t,"payload"),notAfter:$(t,"not_after")};case"rpc_response":return{type:"rpc_response",callId:$(t,"call_id"),status:Nt(t,"status")};case"dropped":return{type:"dropped",reason:$(t,"reason"),subprotocol:Nt(t,"subprotocol")};case"rtc_failure":return{type:"rtc_failure",error:S($(t,"error"))};default:return{type:"unknown",tag:r,raw:t}}}var Ae=class{typed=new Map;any=new Set;queues=new Set;on(e,t){let r=this.typed.get(e)??new Set;this.typed.set(e,r);let i=t;return r.add(i),()=>{r.delete(i)}}onAny(e){return this.any.add(e),()=>{this.any.delete(e)}}events(){let e=new we(()=>this.queues.delete(e));return this.queues.add(e),e}deliver(e,t){this.dispatch(t?t(e):me(e))}dispatch(e){for(let t of this.typed.get(e.type)??[])Wn(t,e);for(let t of this.any)Wn(t,e);for(let t of this.queues)t.push(e)}close(){this.typed.clear(),this.any.clear();for(let e of[...this.queues])e.end();this.queues.clear()}};function Wn(n,e){try{n(e)}catch(t){console.error("[@net-mesh/browser] event listener threw",t)}}function ct(n){let e=$n.join("|"),t=n.replace(new RegExp(`("(?:${e})"\\s*:\\s*)(\\d+)`,"g"),'$1"$2"');return JSON.parse(t)}function $(n,e){let t=n[e];return typeof t=="string"?t:typeof t=="number"||typeof t=="boolean"?String(t):""}function Un(n,e){let t=n[e];return typeof t=="string"&&t.length>0?t:null}function Nt(n,e){let t=n[e];if(typeof t=="number")return t;if(typeof t=="string"){let r=Number(t);return Number.isFinite(r)?r:0}return 0}function ki(n,e){let t=n[e];return Array.isArray(t)?t.filter(r=>typeof r=="string"):[]}function Wt(n,e){let t=n[e];return t instanceof Uint8Array?t:typeof t!="string"?new Uint8Array(0):Bn(t)}function Bn(n){let e=atob(n),t=new Uint8Array(e.length);for(let r=0;r<e.length;r+=1)t[r]=e.charCodeAt(r);return t}function Ut(n){let e="";for(let t of n)e+=String.fromCharCode(t);return btoa(e)}var Re=class{live=new Set;add(e){this.live.add(e)}delete(e){this.live.delete(e)}retireAll(e){let t=[...this.live];this.live.clear();let r=[];for(let i of t)try{i.retire(e)}catch(s){r.push(s)}return r}},be=class{constructor(e,t,r){this.inner=e;this.onCancel=t;this.onDone=r}inner;onCancel;onDone;terminal=null;failure=null;handleDropped=!1;waiters=[];next(){if(this.failure!==null)return Promise.reject(this.failure);if(this.terminal!==null)return Promise.resolve(this.terminal);let{promise:e,resolve:t,reject:r}=Promise.withResolvers(),i={resolve:t,reject:r};return this.waiters.push(i),this.inner.next().then(s=>{Ue(this.waiters,i);let o=Ei(s);o.done&&this.complete(o),t(o)},s=>{Ue(this.waiters,i);let o=S(s);this.fail(o),r(o)}),e}cancel(){this.retire(new D)}retire(e){this.terminal!==null||this.failure!==null||(this.dropHandle(),this.complete({done:!0,error:e}))}[Symbol.asyncIterator](){let e=!1;return{next:async()=>{if(e)return{done:!0,value:void 0};let t=await this.next();if(t.error!==void 0)throw t.error;return t.value===void 0?(e=!0,{done:!0,value:void 0}):(t.done&&(e=!0),{done:!1,value:t.value})},return:async()=>(e=!0,this.cancel(),{done:!0,value:void 0})}}complete(e){if(this.terminal!==null)return;this.terminal=e,this.onDone?.();let t=[...this.waiters];this.waiters.length=0;for(let r of t)r.resolve(e)}fail(e){if(this.terminal!==null||this.failure!==null)return;this.failure=e,this.onDone?.();let t=[...this.waiters];this.waiters.length=0;for(let r of t)r.reject(e)}dropHandle(){if(!this.handleDropped){this.handleDropped=!0;try{this.onCancel()}catch{}}}},_e=class{constructor(e,t){this.inner=e;this.onDone=t}inner;onDone;failure=null;handleDropped=!1;waiters=[];async send(e){if(this.failure!==null)throw this.failure;try{await this.inner.send(e)}catch(t){throw S(t)}}finish(){if(this.failure!==null)return Promise.reject(this.failure);let{promise:e,resolve:t,reject:r}=Promise.withResolvers(),i={reject:r};return this.waiters.push(i),this.inner.finish().then(s=>{Ue(this.waiters,i),this.onDone?.(),t(s)},s=>{Ue(this.waiters,i),this.onDone?.(),r(S(s))}),e}cancel(){this.retire(new D)}retire(e){if(this.failure!==null)return;if(this.failure=e,!this.handleDropped){this.handleDropped=!0;try{this.inner.cancel()}catch{}}this.onDone?.();let t=[...this.waiters];this.waiters.length=0;for(let r of t)r.reject(e)}},Pe=class{constructor(e,t){this.inner=e;this.onDone=t;this.stream=new be(e.stream(),()=>this.dropHandle(),()=>this.onDone?.()),this.sink={send:async r=>{if(this.failure!==null)throw this.failure;try{await this.inner.send(r)}catch(i){throw S(i)}},finishSending:async()=>{if(this.failure!==null)throw this.failure;try{await this.inner.finish_sending()}catch(r){throw S(r)}},cancel:()=>{this.retire(new D)}}}inner;onDone;handleDropped=!1;failure=null;sink;stream;retire(e){this.failure??=e,this.dropHandle(),this.stream.retire(e),this.onDone?.()}dropHandle(){if(!this.handleDropped){this.handleDropped=!0;try{this.inner.cancel()}catch{}}}},Ve=class{constructor(e){this.inner=e;this.retired=e.retired().then(t=>(this.verdict??=lt(t),this.verdict),()=>(this.verdict??="replaced",this.verdict))}inner;retired;verdict=null;async send(e){if(this.verdict!==null)throw new D(at);try{await this.inner.send(e)}catch(t){throw S(t)}}async close(){if(this.verdict!==null)throw new D(at);try{await this.inner.close()}catch(e){throw S(e)}}},Ke=class{constructor(e){this.inner=e;this.retired=e.retired().then(t=>(this.settle(lt(t)),this.verdict),()=>(this.settle("replaced"),this.verdict))}inner;retired;verdict=null;waiters=[];next(){if(this.verdict!==null)return Promise.resolve({done:!0});let{promise:e,resolve:t}=Promise.withResolvers();return this.waiters.push(t),this.inner.next().then(r=>{Ue(this.waiters,t),t(Ai(r))},()=>{Ue(this.waiters,t),t({done:!0})}),e}[Symbol.asyncIterator](){return{next:async()=>{let e=await this.next();return e.done||e.value===void 0?{done:!0,value:void 0}:{done:!1,value:e.value}},return:async()=>({done:!0,value:void 0})}}settle(e){if(this.verdict!==null)return;this.verdict=e;let t=[...this.waiters];this.waiters.length=0;for(let r of t)r({done:!0})}},X=class{constructor(e,t){this.inner=e;this.onDone=t}inner;onDone;closed=!1;get service(){return this.inner.service()}close(){this.closed||(this.closed=!0,this.onDone?.(),this.inner.close())}retire(e){this.close()}};function ne(n){return{credentials:{membership:n.credentials.membership,dispatcher:n.credentials.dispatcher,...n.credentials.capabilityGrant===void 0?{}:{capabilityGrant:n.credentials.capabilityGrant},actingOrg:n.credentials.actingOrg,providerOwnerOrg:n.credentials.providerOwnerOrg,provider:n.credentials.provider,...n.credentials.proofTtlSecs===void 0?{}:{proofTtlSecs:n.credentials.proofTtlSecs}},...n.deadlineMs===void 0?{}:{deadlineMs:n.deadlineMs},...n.streamWindowInitial===void 0?{}:{streamWindowInitial:n.streamWindowInitial},...n.requestWindowInitial===void 0?{}:{requestWindowInitial:n.requestWindowInitial}}}function re(n){return{ownerOrg:n.ownerOrg}}function ze(n){let e=JSON.parse(n);if(e===null||typeof e!="object")throw new Ne("the caller attribution is not an OrgCaller object");let t=e;return{entity:String(t.entity??""),actingOrg:String(t.actingOrg??""),providerOrg:String(t.providerOrg??""),provider:String(t.provider??""),capability:String(t.capability??""),isSameOrg:t.isSameOrg===!0}}function dt(n){return async(e,t)=>await n(ze(e),t)}function ut(n){return async(e,t,r)=>{await n(ze(e),t,new Ve(r))}}function pt(n){return async(e,t)=>await n(ze(e),new Ke(t))}function ft(n){return async(e,t,r)=>{await n(ze(e),new Ke(t),new Ve(r))}}function Ue(n,e){let t=n.indexOf(e);t>=0&&n.splice(t,1)}function Ei(n){return n.done?n.error!==void 0?{done:!0,error:qt(n.error)}:n.value===void 0?{done:!0}:{done:!0,value:n.value}:{done:!1,value:n.value}}function Ai(n){return n.done?{done:!0}:{done:!1,value:n.value}}var $t=class extends Oe{constructor(e){super(e),this.name="StreamIdentityError"}},je=class{constructor(e,t,r="required"){this.inner=e;this.onClosed=t;if(this.wireId=Jn(()=>e.stream_id_hex()),this.peerId=Jn(()=>e.peer_node_hex()),r==="required"&&this.peerId===null)throw new $t("the stream did not report a readable peer, so its frames cannot be attributed");e.on_message(i=>this.receive(i))}inner;onClosed;queues=new Set;listeners=new Set;pending=[];closed=!1;wireId;peerId;get peerNode(){return this.inner.peer_node_hex()}get reliability(){return this.inner.is_reliable()?"reliable":"fireAndForget"}get streamId(){return this.inner.stream_id_hex()}async send(e){if(this.closed)throw new Oe("the stream is closed");try{await this.inner.send(e)}catch(t){throw S(t)}}onMessage(e){this.listeners.add(e);let t=this.pending.splice(0,this.pending.length);for(let r of t)e(r);return()=>{this.listeners.delete(e)}}[Symbol.asyncIterator](){let e=new we(()=>this.queues.delete(e));this.queues.add(e);let t=this.pending.splice(0,this.pending.length);for(let r of t)e.push(r);return this.closed&&e.end(),e}close(){if(!this.closed){this.closed=!0;for(let e of[...this.queues])e.end();this.queues.clear(),this.listeners.clear(),this.onClosed?.(),this.inner.close()}}receive(e){let t=this.decode(e);if(!(t===null||this.closed)){if(this.queues.size===0&&this.listeners.size===0){this.pending.push(t);return}for(let r of this.listeners)try{r(t)}catch(i){console.error("[@net-mesh/browser] stream listener threw",i)}for(let r of this.queues)r.push(t)}}decode(e){if(e instanceof Uint8Array)return e;if(typeof e!="string")return console.error("[@net-mesh/browser] stream callback received",typeof e,"not the leaf event JSON"),null;let t=me(e);return t.type!=="stream_data"||!/^\d+$/.test(t.streamId)||this.wireId!==null&&BigInt(t.streamId)!==this.wireId||this.peerId!==null&&(!/^\d+$/.test(t.peerNode)||BigInt(t.peerNode)!==this.peerId)?null:t.payload}};function Jn(n){let e;try{e=n()}catch{return null}return e===void 0||!/^[0-9a-fA-F]{1,16}$/.test(e)?null:BigInt(`0x${e}`)}var Fn="no verified announcement for",Ri="no live attempt with",_i="no verified offer from",Pi="is not the live attempt",ji=50,Ii=5e3;async function ht(n,e,t){let r;try{r=await e.offer(n)}catch(s){let o=S(s);if(o.message.includes(Fn))return{type:"noAnnouncement",peer:n,detail:o.message};throw o}let i=await Vn(n,r,s=>s.state==="open",e,t);return i.type!=="direct"?i:Bt(n,r,e)}async function yt(n,e,t){let r=null,i=Date.now()+Ii;for(;;)try{r=await e.acceptOffer(n);break}catch(s){let o=S(s);if(o.message.includes(Fn))return{type:"noAnnouncement",peer:n,detail:o.message};if(!o.message.includes(_i)||Date.now()>=i)throw o;await zn()}return Vn(n,r,s=>s.direct,e,t)}async function Bt(n,e,t){let r;try{r=await t.handshake(n,e)}catch(i){let s=Kn(i,n,e);return s!==null?s:{type:"handshakeFailed",peer:n,dialog:e,detail:S(i).message}}return r!==e?{type:"superseded",peer:n,dialog:e,liveDialog:r}:{type:"direct",peer:n,dialog:e}}async function Vn(n,e,t,r,i){for(;;){let s;try{s=i(await r.candidate(n,e))}catch(o){let a=Kn(o,n,e);if(a!==null)return a;throw S(o)}if(s.dialog!==e)return{type:"superseded",peer:n,dialog:e,liveDialog:s.dialog};if(t(s))return{type:"direct",peer:n,dialog:e};if(s.state==="iceTimeout")return{type:"iceTimeout",peer:n,dialog:e};if(s.state==="udpBlocked")return{type:"udpBlocked",peer:n,dialog:e};if(s.state==="failed")return{type:"handshakeFailed",peer:n,dialog:e,detail:s.candidateError??"the attempt reached its terminal transition without installing a session"};await zn()}}function Kn(n,e,t){let{message:r}=S(n);return r.includes(Pi)?{type:"superseded",peer:e,dialog:t,liveDialog:Ci(r)}:r.includes(Ri)?{type:"superseded",peer:e,dialog:t,liveDialog:null}:null}function Ci(n){return/\(dialog ([0-9a-f]{16}) is\)/.exec(n)?.[1]??null}async function zn(){let n=Promise.withResolvers();setTimeout(n.resolve,ji),await n.promise}function Gn(n){let{bootstrapOk:e,stunProbe:t,probed:r}=n;if(t.type!=="unanswered")return{type:"iceTimeout"};let i=ot(e,!0,r??"");return i===null?{type:"iceTimeout"}:{type:"udpBlocked",evidence:i}}function Ft(n){return new pe(Gn(n))}var Hi=2500,Li=700,Jt=3478;async function Vt(n,e={}){let t=Yn(n);if(t===null)return{type:"notRun",reason:`not an address: ${n}`};let r=e.peerConnectionFactory??Di();if(r===null)return{type:"unsupported",detail:"RTCPeerConnection is not available in this context"};let i=e.timeoutMs??Hi,{promise:s,resolve:o}=Promise.withResolvers(),a;try{a=r({iceServers:[{urls:t}],iceCandidatePoolSize:0})}catch(f){return{type:"unsupported",detail:String(f)}}let d=!1,c=f=>{d||(d=!0,o(f))},l=null,u=setTimeout(()=>c({type:"unanswered",detail:l??"no answer inside the probe deadline"}),i),p=()=>{c({type:"unanswered",detail:l??"gathering completed with no reflexive candidate"})};a.onicecandidate=f=>{let y=f.candidate;if(y===null){p();return}let O=Qn(y);O!==null&&c({type:"reflexive",address:O})},a.onicecandidateerror=f=>{let y=f.errorCode,O=`${y}: ${f.errorText} (${f.url})`;if(y<Li){c({type:"stunError",code:y,detail:O});return}l=O},a.onicegatheringstatechange=()=>{a.iceGatheringState==="complete"&&p()};try{a.createDataChannel("net-udp-probe"),await a.setLocalDescription(await a.createOffer())}catch(f){c({type:"unsupported",detail:String(f)})}try{return await s}finally{clearTimeout(u),a.onicecandidate=null,a.onicecandidateerror=null,a.onicegatheringstatechange=null,a.close()}}var Ti=3e3;async function Kt(n,e={}){let t=e.fetchImpl??globalThis.fetch;if(typeof t!="function")return!1;try{return await t(n,{method:"GET",mode:"no-cors",cache:"no-store",redirect:"follow",signal:AbortSignal.timeout(e.timeoutMs??Ti)}),!0}catch{return!1}}function Yn(n){let e=n.trim();if(e.length===0)return null;if(e.startsWith("stun:")||e.startsWith("stuns:"))return e;let t=/^\[([0-9a-fA-F:.]+)\](?::(\d+))?$/.exec(e);if(t)return`stun:[${t[1]??""}]:${t[2]??Jt}`;if((e.match(/:/g)?.length??0)>1)return`stun:[${e}]:${Jt}`;let r=/^([A-Za-z0-9._-]+)(?::(\d+))?$/.exec(e);return r===null?null:`stun:${r[1]??""}:${r[2]??Jt}`}function Qn(n){return n.type==="srflx"?n.address??Xn(n.candidate):n.type!==null?null:/ typ srflx /.test(n.candidate)?Xn(n.candidate):null}function Xn(n){let e=n.split(" "),t=e[4]??"",r=e[5]??"";return r.length>0?`${t}:${r}`:t}function Di(){return typeof RTCPeerConnection>"u"?null:n=>new RTCPeerConnection(n)}var zt=new Map;async function Xe(n={}){if(n.wasm)return n.wasm;let e=n.wasmModule??new URL("./net_leaf.js",import.meta.url).href,t=`${e}|${String(n.wasmUrl??"")}`,r=zt.get(t);if(r)return r;let i=Mi(e,n.wasmUrl);zt.set(t,i);try{return await i}catch(s){throw zt.delete(t),s}}async function Mi(n,e){let t=await import(n),r=qi(t,n);return r.default&&await r.default(e===void 0?void 0:{module_or_path:e}),r}function qi(n,e){if(n===null||typeof n!="object"||!("LeafNode"in n))throw new Error(`${e} is not a net-mesh-leaf module: no LeafNode export`);let t=n.LeafNode;if(typeof t!="function"||!("connect"in t))throw new Error(`${e} exports a LeafNode without a static connect()`);if(typeof t.connect!="function")throw new Error(`${e} exports a LeafNode whose connect is not callable`);return n}function Ie(n,e){if(typeof n=="string")return n;let t=typeof n=="object"&&n!==null?Object.prototype.toString.call(n):String(n);throw new TypeError(`${t} is not a ${e} id: a ${e} id crosses this boundary as 16 hex digits as a STRING \u2014 the spelling this boundary hands out; a ${typeof n} is refused rather than coerced, because a number cannot carry a u64 id`)}function er(n){if(!/^\d+$/.test(n))throw new TypeError(`a decimal node id is digits only, got ${JSON.stringify(n)}`);let e=BigInt(n);if(e>0xffffffffffffffffn)throw new TypeError(`${n} does not fit in a u64 node id`);return e.toString(16).padStart(16,"0")}var mt=class{constructor(e,t,r,i){this.inner=e;this.bootstrapUrl=t;this.failureTyping=r;this.nodeId=e.node_id_hex(),this.anchorRtcAddr=i,e.on_event(s=>this.ingest(s))}inner;bootstrapUrl;failureTyping;hub=new Ae;nodeId;closed=!1;streams=new Set;orgHandles=new Re;anchorRtcAddr;bootstrapObserved=!1;nodeIdHex(){return this.nodeId}anchorIdHex(){return this.inner.anchor_id_hex()}originHashHex(){return this.inner.origin_hash_hex()}async enroll(){try{await this.inner.enroll()}catch(e){throw S(e)}}isEnrolled(){return this.inner.is_enrolled()}async call(e,t,r){try{return await this.inner.call(e,t,r)}catch(i){throw S(i)}}async subscribe(e){try{await this.inner.subscribe(e)}catch(t){throw S(t)}}async publish(e,t){try{await this.inner.publish(e,t)}catch(r){throw S(r)}}openStream(e){let t;try{t=this.inner.open_stream(e)}catch(i){throw S(i)}let r=new je(t,()=>this.streams.delete(r));return this.streams.add(r),r}async callOrg(e,t,r){try{return await this.inner.call_org(e,t,ne(r))}catch(i){throw S(i)}}async callOrgStreaming(e,t,r){try{let i=await this.inner.call_org_streaming(e,t,ne(r)),s=new be(i,()=>i.cancel(),()=>this.orgHandles.delete(s));return this.orgHandles.add(s),s}catch(i){throw S(i)}}async callOrgClientStream(e,t){try{let r=await this.inner.call_org_client_stream(e,ne(t)),i=new _e(r,()=>this.orgHandles.delete(i));return this.orgHandles.add(i),i}catch(r){throw S(r)}}async callOrgDuplex(e,t){try{let r=await this.inner.call_org_duplex(e,ne(t)),i=new Pe(r,()=>this.orgHandles.delete(i));return this.orgHandles.add(i),i}catch(r){throw S(r)}}serveOrg(e,t,r,i){try{let s=new X(this.inner.serve_org(e,t,dt(r),re(i)),()=>this.orgHandles.delete(s));return this.orgHandles.add(s),s}catch(s){throw S(s)}}serveOrgStreaming(e,t,r,i){try{let s=new X(this.inner.serve_org_streaming(e,t,ut(r),re(i)),()=>this.orgHandles.delete(s));return this.orgHandles.add(s),s}catch(s){throw S(s)}}serveOrgClientStream(e,t,r,i){try{let s=new X(this.inner.serve_org_client_stream(e,t,pt(r),re(i)),()=>this.orgHandles.delete(s));return this.orgHandles.add(s),s}catch(s){throw S(s)}}serveOrgDuplex(e,t,r,i){try{let s=new X(this.inner.serve_org_duplex(e,t,ft(r),re(i)),()=>this.orgHandles.delete(s));return this.orgHandles.add(s),s}catch(s){throw S(s)}}async signal(e,t,r,i){try{await this.inner.signal(Ie(e,"peer"),Ie(t,"dialog"),r,i)}catch(s){throw S(s)}}async connectPeer(e){let t;try{t=this.inner.peer_direct_dialog(Ie(e,"peer"))}catch(r){throw S(r)}return t!=null?{type:"direct",peer:e,dialog:t}:ht(e,this.peerPrimitives(),Ce)}peerPrimitives(){return{offer:e=>this.inner.peer_offer(e),acceptOffer:e=>this.inner.peer_accept_offer(e),candidate:(e,t)=>this.inner.peer_candidate_in(e,t),handshake:(e,t)=>this.inner.peer_handshake_in(e,t)}}async handshakePeer(e,t){return Bt(e,t,this.peerPrimitives())}async acceptPeer(e){return yt(e,this.peerPrimitives(),Ce)}async peerAttempt(e){try{return Ce(await this.inner.peer_candidate(e))}catch(t){throw S(t)}}counters(){return St(this.inner.counters_json())}rtcStats(){return tr(this.inner.rtc_stats_json())}enableNetworkRetry(){try{this.inner.arm_network_retry()}catch(e){throw S(e)}}retryReport(){return nr(this.inner.retry_report())}async announce(e){try{await this.inner.announce([...e])}catch(t){throw S(t)}}async query(e){let t;try{t=await this.inner.query(e)}catch(r){throw S(r)}return wt(t)}on(e,t){return this.hub.on(e,t)}onEvent(e){return this.hub.onAny(e)}events(){return this.hub.events()}async refineIceFailure(e){return Xt(e,{bootstrapUrl:this.bootstrapUrl,bootstrapObserved:this.bootstrapObserved,anchorRtcAddr:this.anchorRtcAddr,failureTyping:this.failureTyping})}close(){if(this.closed)return;this.closed=!0;let e=[];for(let r of this.orgHandles.retireAll(new D("org:rpc:cancelled: the node is closed")))e.push(S(r));let t=[...this.streams];this.streams.clear();for(let r of t)try{r.close()}catch(i){e.push(S(i))}try{this.hub.close()}catch(r){e.push(S(r))}try{this.inner.close()}catch(r){e.push(S(r))}if(e.length>0)throw new AggregateError(e,`close: ${e.length} of this node's teardown steps failed`)}ingest(e){let t=me(e);t.type==="connected"&&(this.bootstrapObserved=!0,t.rtcAddr!==null&&(this.anchorRtcAddr=t.rtcAddr)),this.hub.dispatch(t)}};async function Ni(n){let e=bt(n),t=n.failureTyping??{},r=await Xe(n);try{let i=await r.LeafNode.connect(e);return new mt(i,n.bootstrapUrl??null,t,n.anchorRtcAddr??null)}catch(i){throw await Xt(S(i),{bootstrapUrl:n.bootstrapUrl??null,bootstrapObserved:!1,anchorRtcAddr:n.anchorRtcAddr??null,failureTyping:t})}}function bt(n){return{credentialB64:$i(n),origin:n.origin??Bi(),...n.bootstrapUrl===void 0?{}:{bootstrapUrl:n.bootstrapUrl},...n.iceServers?{iceServers:n.iceServers}:{},...Wi(n)}}function St(n){let e=JSON.parse(n);if(e===null||typeof e!="object")return{};let t={};for(let[r,i]of Object.entries(e))t[r]=typeof i=="string"?i:String(i);return t}function Ce(n){let e=JSON.parse(n);if(e===null||typeof e!="object")throw new TypeError(`peer_candidate did not answer an object: ${n}`);let t=e,r=t.state;if(r!=="gathering"&&r!=="open"&&r!=="iceTimeout"&&r!=="udpBlocked"&&r!=="failed")throw new TypeError(`peer_candidate answered an unknown state: ${String(r)}`);let i=t.candidateError;return{dialog:String(t.dialog??""),state:r,sent:Number(t.sent??0),applied:Number(t.applied??0),answered:t.answered===!0,direct:t.direct===!0,remainingMs:String(t.remainingMs??"0"),candidateError:typeof i=="string"?i:null}}function tr(n){let e=JSON.parse(n);if(e===null||typeof e!="object")throw new TypeError(`rtc_stats_json did not answer an object: ${n}`);let t={},r={};for(let[i,s]of Object.entries(e)){if(i==="not_applicable"){if(s===null||typeof s!="object")continue;for(let[o,a]of Object.entries(s))r[o]=String(a);continue}t[i]=typeof s=="string"?s:String(s)}return{counters:t,notApplicable:r}}function nr(n){let e=JSON.parse(n);if(e===null||typeof e!="object")throw new TypeError(`retry_report did not answer an object: ${n}`);let t=e;return{armed:t.armed===!0,online:String(t.online??"0"),iceFailed:String(t.iceFailed??"0"),triggers:String(t.triggers??"0"),started:String(t.started??"0"),coalesced:String(t.coalesced??"0"),notEligible:String(t.notEligible??"0"),openEpisodes:Number(t.openEpisodes??0),owned:Number(t.owned??0),last:typeof t.last=="string"?t.last:null}}async function Xt(n,e){if(!(n instanceof pe)||n.failure.type!=="iceTimeout"||e.failureTyping.probeOnIceTimeout===!1)return n;let t=e.anchorRtcAddr;if(t===null)return n;let r=await Vt(t,e.failureTyping.stun);if(r.type!=="unanswered")return n;let i=e.bootstrapObserved||e.bootstrapUrl!==null&&await Kt(e.bootstrapUrl,e.failureTyping.bootstrap);return Ft({bootstrapOk:i,stunProbe:r,probed:t})}function wt(n){let e=ct(n);if(!Array.isArray(e))return[];let t=[];for(let r of e){if(r===null||typeof r!="object")continue;let i={...r},s=i.capabilities,o=Ui(i.node_id);t.push({nodeId:o,peerIdHex:er(o),entityId:gt(i.entity_id),capabilities:Array.isArray(s)?s.filter(a=>typeof a=="string"):[],rtcAddr:gt(i.rtc_addr),noisePubkey:gt(i.noise_pubkey),version:gt(i.version)})}return t}var Zn=/^[0-9a-fA-F]{64}$/;function Wi(n){let{entitySecretHex:e,noiseSecretHex:t}=n;if(e===void 0){if(t!==void 0)throw new ge("noiseSecretHex was supplied without entitySecretHex: the leaf would generate the entity half, so the identity would not be the one you meant to inject");return{}}if(!Zn.test(e))throw new ge(`entitySecretHex must be 32 bytes of hex (64 hex digits), got ${e.length} characters`);if(t===void 0)return{entitySecretHex:e};if(!Zn.test(t))throw new ge(`noiseSecretHex must be 32 bytes of hex (64 hex digits), got ${t.length} characters`);return{entitySecretHex:e,noiseSecretHex:t}}function Ui(n){return typeof n=="string"?n:typeof n=="number"?String(n):""}function gt(n){return typeof n=="string"?n.length>0?n:null:typeof n=="number"?String(n):null}function $i(n){if(n.credentialB64!==void 0)return n.credentialB64;let e=n.credential;if(typeof e=="string")return e;if(e instanceof Uint8Array)return Ut(e);throw new Error("connect() needs a credential: pass credentialB64 or credential")}function Bi(){let n=globalThis.location?.origin;if(typeof n=="string"&&n.length>0)return n;throw new Error("connect() needs an origin: there is no location.origin in this context")}function Gt(n){let e=me(n);return e.type!=="unknown"?e:Ji(e)??e}function Yt(n){switch(n.type){case"leader_changed":case"subscription_restored":case"leader_lost":case"generation_fenced":case"not_leader":case"promotion_failed":return!0;default:return!1}}function Ji(n){let e=n.raw;if(e===null||typeof e!="object")return null;let t={...e};switch(n.tag){case"leader_changed":return{type:"leader_changed",generation:He(t.generation)};case"subscription_restored":return{type:"subscription_restored",channel:typeof t.channel=="string"?t.channel:""};case"leader_lost":{let r=Number(t.failed);return{type:"leader_lost",generation:He(t.generation),failed:Number.isFinite(r)?r:0}}case"generation_fenced":return{type:"generation_fenced",presented:He(t.presented),current:He(t.current)};case"not_leader":return{type:"not_leader",presented:He(t.presented),current:He(t.current)};case"promotion_failed":return{type:"promotion_failed",generation:He(t.generation),detail:typeof t.detail=="string"?t.detail:""};default:return null}}function He(n){return typeof n=="string"?n:typeof n=="number"&&Number.isFinite(n)?String(n):"0"}function Qt(n){let e=n.MeshSession;if(!(e!==null&&(typeof e=="object"||typeof e=="function")&&"open"in e&&typeof e.open=="function"))throw new Error("this net-mesh-leaf bundle has no MeshSession: leader election and the follower proxy need a wasm build from Stage 5 slice 3 or later");return n}var vt=class{constructor(e){this.inner=e;this.streamGeneration=e.generation(),e.on_event(t=>this.hub.deliver(t,Gt)),this.hub.onAny(t=>{if(t.type==="leader_lost"||t.type==="not_leader"){this.orgHandles.retireAll(new Z(this.streamGeneration)),this.endStreams();return}let r=this.inner.generation();if(r===this.streamGeneration)return;let i=this.streamGeneration;this.streamGeneration=r,this.orgHandles.retireAll(new Z(i)),this.endStreams()})}inner;hub=new Ae;streams=new Set;streamGeneration;orgHandles=new Re;closed=!1;role(){return this.inner.role()==="leader"?"leader":"follower"}generation(){return this.inner.generation()}nodeIdHex(){return this.inner.node_id_hex()??null}fingerprint(){return this.inner.fingerprint()}scope(){return this.inner.scope()}interruptionMs(){return this.inner.interruption_ms()??null}async call(e,t,r){return await this.guard(()=>this.inner.call(e,t,r))}async subscribe(e){await this.guard(()=>this.inner.subscribe(e))}async unsubscribe(e){await this.guard(()=>this.inner.unsubscribe(e))}async publish(e,t){await this.guard(()=>this.inner.publish(e,t))}async announce(e){await this.guard(()=>this.inner.announce([...e]))}async query(e){return wt(await this.guard(()=>this.inner.query(e)))}async counters(){return St(await this.guard(()=>this.inner.counters_json()))}async enroll(){await this.guard(()=>this.inner.enroll())}async isEnrolled(){return await this.guard(()=>this.inner.is_enrolled())}async signal(e,t,r,i){await this.guard(()=>this.inner.signal(Ie(e,"peer"),Ie(t,"dialog"),r,i))}async connectPeer(e){let t;try{t=await this.inner.peer_direct_dialog(e)??void 0}catch{t=void 0}return t!==void 0?{type:"direct",peer:e,dialog:t}:ht(e,this.peerPrimitives(),Ce)}async acceptPeer(e){return yt(e,this.peerPrimitives(),Ce)}peerPrimitives(){return{offer:e=>this.guard(()=>this.inner.peer_offer(e)),acceptOffer:e=>this.guard(()=>this.inner.peer_accept_offer(e)),candidate:(e,t)=>this.guard(()=>this.inner.peer_candidate(e,t)),handshake:(e,t)=>this.guard(()=>this.inner.peer_handshake(e,t))}}async openStream(e){let t=this.inner.generation(),r=new je(await this.guard(()=>this.inner.open_stream(e)));return this.closed||this.inner.generation()!==t?(r.close(),r):(this.streams.add(r),r)}async callOrg(e,t,r){return await this.guard(()=>this.inner.call_org(e,t,ne(r)))}async callOrgStreaming(e,t,r){let i=this.inner.generation(),s;try{let o=await this.inner.call_org_streaming(e,t,ne(r));s=new be(o,()=>o.cancel(),()=>this.orgHandles.delete(s))}catch(o){throw S(o)}return this.closed||this.inner.generation()!==i?(s.retire(this.closed?new D("org:rpc:cancelled: the session is closed"):new Z(i)),s):(this.orgHandles.add(s),s)}async callOrgClientStream(e,t){let r=this.inner.generation(),i;try{let s=await this.inner.call_org_client_stream(e,ne(t));i=new _e(s,()=>this.orgHandles.delete(i))}catch(s){throw S(s)}return this.closed||this.inner.generation()!==r?(i.retire(this.closed?new D("org:rpc:cancelled: the session is closed"):new Z(r)),i):(this.orgHandles.add(i),i)}async callOrgDuplex(e,t){let r=this.inner.generation(),i;try{let s=await this.inner.call_org_duplex(e,ne(t));i=new Pe(s,()=>this.orgHandles.delete(i))}catch(s){throw S(s)}return this.closed||this.inner.generation()!==r?(i.retire(this.closed?new D("org:rpc:cancelled: the session is closed"):new Z(r)),i):(this.orgHandles.add(i),i)}serveOrg(e,t,r,i){try{let s=new X(this.inner.serve_org(e,t,dt(r),re(i)),()=>this.orgHandles.delete(s));return this.orgHandles.add(s),s}catch(s){throw S(s)}}serveOrgStreaming(e,t,r,i){try{let s=new X(this.inner.serve_org_streaming(e,t,ut(r),re(i)),()=>this.orgHandles.delete(s));return this.orgHandles.add(s),s}catch(s){throw S(s)}}serveOrgClientStream(e,t,r,i){try{let s=new X(this.inner.serve_org_client_stream(e,t,pt(r),re(i)),()=>this.orgHandles.delete(s));return this.orgHandles.add(s),s}catch(s){throw S(s)}}serveOrgDuplex(e,t,r,i){try{let s=new X(this.inner.serve_org_duplex(e,t,ft(r),re(i)),()=>this.orgHandles.delete(s));return this.orgHandles.add(s),s}catch(s){throw S(s)}}on(e,t){return this.hub.on(e,t)}onEvent(e){return this.hub.onAny(e)}onLifecycle(e){return this.hub.onAny(t=>{Yt(t)&&e(t)})}events(){return this.hub.events()}close(){this.closed||(this.closed=!0,this.orgHandles.retireAll(new D("org:rpc:cancelled: the session is closed")),this.endStreams(),this.hub.close(),this.inner.close())}endStreams(){let e=[...this.streams];this.streams.clear();for(let t of e)t.close()}async guard(e){try{return await e()}catch(t){throw S(t)}}};async function Fi(n){let e=Qt(await Xe(n)),t={...bt(n),...n.capabilities?{capabilities:[...n.capabilities]}:{},...n.subscriptions?{subscriptions:[...n.subscriptions]}:{},...n.dbName===void 0?{}:{dbName:n.dbName},...n.lockScope===void 0?{}:{lockScope:n.lockScope}};try{return new vt(await e.MeshSession.open(t))}catch(r){throw S(r)}}var rr=["invalid-data","version-mismatch","forbidden","not-ready","capacity","timeout","aborted","indeterminate","owner-lost","closed","action-rejected","result-expired"],h=class extends Error{code;constructor(e,t,r){super(t,r),this.name="StoreError",this.code=e}};function Ot(n){return(n instanceof Error?n.message:String(n)).includes("stale stream handle")}var xt=Object.freeze({$hidden:!0});function kt(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)&&Object.keys(n).length===1&&n.$hidden===!0}function Vi(n){return e=>kt(e)?xt:n(e)}var ir=Object.freeze({"card-game":Object.freeze({"players.*.hand":"owner",deck:"nobody","deck.length":"everyone"})}),Ki=/^(\*|[^.*]+)$/;function Le(n){let e;if(n==="open")e={};else if(typeof n=="string"){let i=ir[n];if(i===void 0)throw new h("invalid-data",`unknown visibility preset '${n}'`);e={...i}}else if(typeof n=="object"&&n!==null){let{preset:i,...s}=n;if(e={},i!==void 0){let o=ir[i];if(o===void 0)throw new h("invalid-data",`unknown visibility preset '${String(i)}'`);Object.assign(e,o)}Object.assign(e,s)}else throw new h("invalid-data","visibility is a preset name or an object of path \u2192 rule");let t=[],r=!1;for(let[i,s]of Object.entries(e)){let o=i.split(".");if(i.length===0||!o.every(c=>Ki.test(c)))throw new h("invalid-data",`visibility path '${i}' is not dot-separated keys and '*'`);let a=o.length>1&&o[o.length-1]==="length";if(!(s==="everyone"||s==="nobody"||s==="owner"||Array.isArray(s)&&s.length>0&&s.every(c=>typeof c=="string"&&c.length>0)))throw new h("invalid-data",`visibility rule for '${i}' must be 'everyone', 'nobody', 'owner' or a non-empty list of audiences`);if(s==="owner"){if(!o.includes("*"))throw new h("invalid-data",`'owner' needs a '*' in the path to name the owner: '${i}'`);r=!0}t.push(Object.freeze({path:i,segments:Object.freeze(o),rule:s,counts:a}))}return t.sort((i,s)=>i.segments.length-s.segments.length),Object.freeze({rules:Object.freeze(t),perPlayer:r})}function sr(n,e,t){return n==="everyone"?!0:n==="nobody"||t===null?!1:n==="owner"?e[0]===t.peer:n.some(r=>t.audience.includes(r))}function zi(n,e){let t=[],r=(i,s,o,a)=>{if(s===e.length){t.push({keys:[...o],captures:[...a],value:i});return}if(typeof i!="object"||i===null)return;let d=e[s];if(d==="*"){let c=Array.isArray(i)?i.map((l,u)=>[u,l]):Object.entries(i);for(let[l,u]of c)r(u,s+1,[...o,l],[...a,String(l)]);return}Array.isArray(i)||!Object.prototype.hasOwnProperty.call(i,d)||r(i[d],s+1,[...o,d],a)};return r(n,0,[],[]),t}var Zt=Symbol("drop");function Xi(n,e,t){let r=n;for(let i of e){let s=r.children.get(i);s===void 0&&(s={children:new Map},r.children.set(i,s)),r=s}r.value=t}function en(n,e){if("value"in e)return e.value;if(e.children.size===0||typeof n!="object"||n===null)return n;if(Array.isArray(n)){let r=[];return n.forEach((i,s)=>{let o=e.children.get(s),a=o===void 0?i:en(i,o);a!==Zt&&r.push(a)}),r}let t={};for(let[r,i]of Object.entries(n)){let s=e.children.get(r),o=s===void 0?i:en(i,s);o!==Zt&&(t[r]=o)}return t}var or="\0";function Te(n,e,t){if(n.rules.length===0)return e;let r={children:new Map},i=new Set,s=!1;for(let o of n.rules){if(o.counts)continue;let a=n.rules.find(c=>c.counts&&c.segments.length===o.segments.length+1&&c.segments.slice(0,-1).every((l,u)=>l===o.segments[u])),d=o.segments[o.segments.length-1]==="*";for(let c of zi(e,o.segments)){let l="",u=!1;for(let f=0;f<c.keys.length-1&&!u;f+=1)l=f===0?String(c.keys[0]):`${l}${or}${String(c.keys[f])}`,u=i.has(l);if(u||sr(o.rule,c.captures,t))continue;let p=d?Zt:xt;a!==void 0&&Array.isArray(c.value)&&sr(a.rule,c.captures,t)&&(p=c.value.map(()=>xt)),Xi(r,c.keys,p),i.add(c.keys.map(String).join(or)),s=!0}}return s?en(e,r):e}function ar(n,e,t){return n.visibility===void 0?e:Te(Le(n.visibility),e,t)}function Gi(n,e,t,r){let i=ar(n,e,t);for(let s of r){let o=i;for(let d of s.split(".")){if(typeof o!="object"||o===null||!Object.prototype.hasOwnProperty.call(o,d)){o=void 0;break}o=o[d]}if(o!==void 0&&!kt(o)&&!(Array.isArray(o)&&o.every(d=>kt(d))))throw new Error(`'${s}' is visible to ${t===null?"nobody in particular":t.peer}`)}}function Yi(n){if(n.id.length===0)throw new h("invalid-data","a store definition needs a non-empty id");if(!Number.isSafeInteger(n.version)||n.version<1)throw new h("invalid-data",`store '${n.id}' needs a positive integer version, got ${String(n.version)}`);let e;try{e=n.empty()}catch(t){throw new h("invalid-data",`store '${n.id}' could not build its empty state: ${String(t)}`,{cause:t})}try{n.state(e)}catch(t){throw new h("invalid-data",`store '${n.id}': empty() is not a valid state, so a replica could not clear a projection with it: ${String(t)}`,{cause:t})}if(n.visibility!==void 0)try{Le(n.visibility)}catch(t){throw new h("invalid-data",`store '${n.id}': ${t instanceof Error?t.message:String(t)}`,{cause:t})}if(n.interest!==void 0){for(let[t,r]of Object.entries(n.interest))if(t.length===0||t.includes(".")||typeof r!="function")throw new h("invalid-data",`store '${n.id}': interest maps a top-level collection name to a key function, got '${t}'`)}if(n.entities!==void 0)for(let[t,r]of Object.entries(n.entities)){if(t.length===0||t.includes(".")||typeof r!="function")throw new h("invalid-data",`store '${n.id}': entities maps a top-level collection name to a per-entity parser, got '${t}'`);let i=e[t];if(i!==void 0&&!tn(i))throw new h("invalid-data",`store '${n.id}': entities names '${t}', but empty().${t} is not a record of entities`)}return Object.freeze({...n})}function tn(n){if(typeof n!="object"||n===null||Array.isArray(n))return!1;let e=Object.getPrototypeOf(n);return e===Object.prototype||e===null}var T=class extends Error{constructor(t,r){super(t);this.reason=t;this.at=r}reason;at};function De(n){let e=new nn(n);try{return{ok:!0,value:e.document()}}catch(t){if(t instanceof T)return{ok:!1,reason:t.reason,at:t.at};throw t}}var nn=class{constructor(e){this.src=e}src;i=0;document(){if(this.skipWhitespace(),this.i>=this.src.length)throw new T("empty",this.i);let e=this.value(0);if(this.skipWhitespace(),this.i!==this.src.length)throw new T("trailing-content",this.i);return e}value(e){let t=this.src.charCodeAt(this.i);switch(t){case 123:return this.object(e+1);case 91:return this.array(e+1);case 34:return this.string();default:break}if(t===45||t>=48&&t<=57)return this.number();if(this.src.startsWith("true",this.i))return this.i+=4,!0;if(this.src.startsWith("false",this.i))return this.i+=5,!1;if(this.src.startsWith("null",this.i))return this.i+=4,null;throw new T(Number.isNaN(t)?"unexpected-end":"literal",this.i)}object(e){if(e>16)throw new T("depth-exceeded",this.i);this.i+=1;let t=Object.create(null);if(this.skipWhitespace(),this.peek()===125)return this.i+=1,t;for(;;){if(this.skipWhitespace(),this.peek()!==34)throw new T("unexpected-token",this.i);let r=this.i,i=this.string();if(Object.prototype.hasOwnProperty.call(t,i))throw new T("duplicate-key",r);if(this.skipWhitespace(),this.peek()!==58)throw new T("unexpected-token",this.i);this.i+=1,this.skipWhitespace(),t[i]=this.value(e),this.skipWhitespace();let s=this.peek();if(s===44){this.i+=1;continue}if(s===125)return this.i+=1,t;throw new T(s===-1?"unexpected-end":"unexpected-token",this.i)}}array(e){if(e>16)throw new T("depth-exceeded",this.i);this.i+=1;let t=[];if(this.skipWhitespace(),this.peek()===93)return this.i+=1,t;for(;;){this.skipWhitespace(),t.push(this.value(e)),this.skipWhitespace();let r=this.peek();if(r===44){this.i+=1;continue}if(r===93)return this.i+=1,t;throw new T(r===-1?"unexpected-end":"unexpected-token",this.i)}}string(){this.i+=1;let e="";for(;;){if(this.i>=this.src.length)throw new T("unexpected-end",this.i);let t=this.src.charCodeAt(this.i);if(t===34)return this.i+=1,e;if(t===92){e+=this.escape();continue}if(t<32)throw new T("string-control-char",this.i);e+=this.src[this.i],this.i+=1}}escape(){this.i+=1;let e=this.src[this.i];switch(this.i+=1,e){case'"':return'"';case"\\":return"\\";case"/":return"/";case"b":return"\b";case"f":return"\f";case"n":return`
|
|
2
|
-
`;case"r":return"\r";case"t":return" ";case"u":{let t=this.src.slice(this.i,this.i+4);if(!/^[0-9a-fA-F]{4}$/.test(t))throw new T("string-escape",this.i);return this.i+=4,String.fromCharCode(Number.parseInt(t,16))}default:throw new T("string-escape",this.i-1)}}number(){let e=this.i;if(this.peek()===45&&(this.i+=1),this.peek()===48){if(this.i+=1,this.isDigit(this.peek()))throw new T("number-grammar",e)}else if(this.isDigit(this.peek()))for(;this.isDigit(this.peek());)this.i+=1;else throw new T("number-grammar",e);if(this.peek()===46){if(this.i+=1,!this.isDigit(this.peek()))throw new T("number-grammar",e);for(;this.isDigit(this.peek());)this.i+=1}let t=this.src[this.i];if(t==="e"||t==="E"){this.i+=1;let i=this.peek();if((i===43||i===45)&&(this.i+=1),!this.isDigit(this.peek()))throw new T("number-grammar",e);for(;this.isDigit(this.peek());)this.i+=1}let r=Number(this.src.slice(e,this.i));if(!Number.isFinite(r))throw new T("number-not-finite",e);return r}isDigit(e){return e>=48&&e<=57}peek(){return this.i>=this.src.length?-1:this.src.charCodeAt(this.i)}skipWhitespace(){for(;;){let e=this.peek();if(e===32||e===9||e===10||e===13){this.i+=1;continue}return}}};var cr=1,G=32,fe=16,on=16,Qi=32,Zi=128,dr=256,ur=64,Se=1024*1024,oe=255,an=256,ln=8,Ge=64,es=256,ts=18446744073709551615n,ns=20,rs=["join","resume","resync","act","in","aud","alive","leave","int"],is=["man","snap","delta","res","ok","no"],ss={join:{required:["v","k","q","def","ver","store","key","aud"],optional:["int"]},resume:{required:["v","k","q","h","aud"],optional:["int"]},int:{required:["v","k","q","h","int"],optional:[]},resync:{required:["v","k","q","h","g","have"],optional:[]},aud:{required:["v","k","q","h","aud"],optional:[]},alive:{required:["v","k","q","h"],optional:[]},leave:{required:["v","k","q","h"],optional:[]},act:{required:["v","k","q","h","s","name","in"],optional:[]},in:{required:["v","k","h","name","s","in"],optional:[]},man:{required:["v","k","h","inc","g","r","n","bytes"],optional:["q"]},snap:{required:["v","k","h","g","r","i","n","d"],optional:[]},delta:{required:["v","k","h","g","base","r","ops"],optional:[]},res:{required:["v","k","q","h","s","out"],optional:[]},ok:{required:["v","k","q","h"],optional:[]},no:{required:["v","k","code"],optional:["q","h","s","detail"]}},os={join:["v","k","q","def","ver","store","key","aud","int"],resume:["v","k","q","h","aud","int"],int:["v","k","q","h","int"],resync:["v","k","q","h","g","have"],aud:["v","k","q","h","aud"],alive:["v","k","q","h"],leave:["v","k","q","h"],act:["v","k","q","h","s","name","in"],in:["v","k","h","name","s","in"],man:["v","k","q","h","inc","g","r","n","bytes"],snap:["v","k","h","g","r","i","n","d"],delta:["v","k","h","g","base","r","ops"],res:["v","k","q","h","s","out"],ok:["v","k","q","h"],no:["v","k","q","h","code","s","detail"]},rn=new Set(rs),lr=new Set(is),as=new Set(rr),ls=/^[A-Za-z0-9+/]+={0,2}$/;function B(n,e,t="invalid-data"){return{ok:!1,code:t,stage:n,reason:e}}var Et=class{constructor(e){this.refusal=e}refusal};function L(n,e,t="invalid-data"){return new Et(B(n,e,t))}function v(n){return n instanceof Et}function U(n){let e=0;for(let t=0;t<n.length;t+=1){let r=n.codePointAt(t);r>65535&&(t+=1),e+=r<=127?1:r<=2047?2:r<=65535?3:4}return e}function Me(n,e){if(U(n)>e.maxBytes)return B("bytes","frame-too-large","capacity");let r=De(n);if(!r.ok)return B("json",r.reason);let i=r.value;if(typeof i!="object"||i===null||Array.isArray(i))return B("json","not-an-object");let s=i;if(s.v!==cr)return B("envelope","unknown-version");let o=s.k;if(typeof o!="string"||!(rn.has(o)||lr.has(o)))return B("envelope","unknown-kind");let a=o;if(!(e.as==="owner"?rn:lr).has(a))return B("direction",`wrong-direction:${a}`);let c=ss[a],l=new Set([...c.required,...c.optional]);for(let u of Object.keys(s))if(!l.has(u))return B("payload","unknown-field");for(let u of c.required)if(!Object.prototype.hasOwnProperty.call(s,u))return B("payload","missing-field");return cs(a,s)}function cs(n,e){let t=(c,l)=>{let u=e[c];return typeof u!="string"||u.length!==l||!us(u)?L("payload",`non-canonical-hex:${c}`):u},r=c=>{let l=e[c];return typeof l!="string"||!pr(l)?L("payload",`non-canonical-decimal:${c}`):l},i=(c,l,u)=>{let p=e[c];return typeof p!="number"||!Number.isInteger(p)||p<l||p>u?L("payload",`bad-integer:${c}`):p},s=c=>{let l=e[c];return typeof l!="string"||l.length===0?L("payload",`bad-string:${c}`):l},o=c=>{let l=e[c];return typeof l!="object"||l===null||Array.isArray(l)?L("payload",`bad-object:${c}`):l},a=()=>{let c=e.aud;if(!Array.isArray(c))return L("payload","bad-audience");if(c.length>Qi)return L("payload","audience-too-many","capacity");let l=[];for(let u of c){if(typeof u!="string"||u.length===0)return L("payload","bad-audience-label");if(U(u)>Zi)return L("payload","audience-label-too-long","capacity");l.push(u)}return l},d=c=>{if(!Object.prototype.hasOwnProperty.call(e,"int"))return c?L("payload","missing-field"):void 0;let l=e.int;if(!Array.isArray(l))return L("payload","bad-interest");if(l.length>dr)return L("payload","interest-too-many","capacity");let u=[];for(let p of l){if(typeof p!="string"||p.length===0)return L("payload","bad-interest-key");if(U(p)>ur)return L("payload","interest-key-too-long","capacity");u.push(p)}return u};switch(n){case"int":{let c=t("q",fe);if(v(c))return c.refusal;let l=t("h",G);if(v(l))return l.refusal;let u=d(!0);return v(u)?u.refusal:{ok:!0,message:{k:n,q:c,h:l,int:u}}}case"join":{let c=t("q",fe);if(v(c))return c.refusal;let l=s("def");if(v(l))return l.refusal;let u=i("ver",0,Number.MAX_SAFE_INTEGER);if(v(u))return u.refusal;let p=s("store");if(v(p))return p.refusal;let f=s("key");if(v(f))return f.refusal;let y=a();if(v(y))return y.refusal;let O=d(!1);return v(O)?O.refusal:{ok:!0,message:O===void 0?{k:n,q:c,def:l,ver:u,store:p,key:f,aud:y}:{k:n,q:c,def:l,ver:u,store:p,key:f,aud:y,int:O}}}case"resume":case"aud":{let c=t("q",fe);if(v(c))return c.refusal;let l=t("h",G);if(v(l))return l.refusal;let u=a();if(v(u))return u.refusal;if(n==="resume"){let p=d(!1);return v(p)?p.refusal:{ok:!0,message:p===void 0?{k:n,q:c,h:l,aud:u}:{k:n,q:c,h:l,aud:u,int:p}}}return{ok:!0,message:{k:n,q:c,h:l,aud:u}}}case"resync":{let c=t("q",fe);if(v(c))return c.refusal;let l=t("h",G);if(v(l))return l.refusal;let u=r("g");if(v(u))return u.refusal;let p=r("have");return v(p)?p.refusal:{ok:!0,message:{k:n,q:c,h:l,g:u,have:p}}}case"alive":case"leave":case"ok":{let c=t("q",fe);if(v(c))return c.refusal;let l=t("h",G);return v(l)?l.refusal:{ok:!0,message:{k:n,q:c,h:l}}}case"act":{let c=t("q",fe);if(v(c))return c.refusal;let l=t("h",G);if(v(l))return l.refusal;let u=r("s");if(v(u))return u.refusal;let p=s("name");if(v(p))return p.refusal;let f=o("in");return v(f)?f.refusal:{ok:!0,message:{k:n,q:c,h:l,s:u,name:p,in:f}}}case"in":{let c=t("h",G);if(v(c))return c.refusal;let l=s("name");if(v(l))return l.refusal;let u=r("s");if(v(u))return u.refusal;let p=o("in");return v(p)?p.refusal:{ok:!0,message:{k:n,h:c,name:l,s:u,in:p}}}case"res":{let c=t("q",fe);if(v(c))return c.refusal;let l=t("h",G);if(v(l))return l.refusal;let u=r("s");if(v(u))return u.refusal;let p=o("out");return v(p)?p.refusal:{ok:!0,message:{k:n,q:c,h:l,s:u,out:p}}}case"man":{let c=t("h",G);if(v(c))return c.refusal;let l=t("inc",on);if(v(l))return l.refusal;let u=r("g");if(v(u))return u.refusal;let p=r("r");if(v(p))return p.refusal;let f=i("n",1,oe);if(v(f))return f.refusal;let y=r("bytes");if(v(y))return y.refusal;if(BigInt(y)>BigInt(Se))return B("payload","snapshot-too-large","capacity");if(Object.prototype.hasOwnProperty.call(e,"q")){let O=t("q",fe);return v(O)?O.refusal:{ok:!0,message:{k:n,q:O,h:c,inc:l,g:u,r:p,n:f,bytes:y}}}return{ok:!0,message:{k:n,h:c,inc:l,g:u,r:p,n:f,bytes:y}}}case"snap":{let c=t("h",G);if(v(c))return c.refusal;let l=r("g");if(v(l))return l.refusal;let u=r("r");if(v(u))return u.refusal;let p=i("n",1,oe);if(v(p))return p.refusal;let f=i("i",0,p-1);if(v(f))return f.refusal;let y=e.d;return typeof y!="string"||!cn(y)?B("payload","non-canonical-base64:d"):{ok:!0,message:{k:n,h:c,g:l,r:u,i:f,n:p,d:y}}}case"delta":{let c=t("h",G);if(v(c))return c.refusal;let l=r("g");if(v(l))return l.refusal;let u=r("base");if(v(u))return u.refusal;let p=r("r");if(v(p))return p.refusal;let f=ds(e.ops);return v(f)?f.refusal:{ok:!0,message:{k:n,h:c,g:l,base:u,r:p,ops:f}}}case"no":{let c=e.code;if(typeof c!="string"||!as.has(c))return B("payload","unknown-code");let l=Object.prototype.hasOwnProperty.call(e,"q"),u=Object.prototype.hasOwnProperty.call(e,"h"),p=Object.prototype.hasOwnProperty.call(e,"s");if(!l&&!u)return B("payload","no-names-nothing");if(!l){if(c!=="closed"&&c!=="owner-lost")return B("payload","unsolicited-no-must-be-closed-or-owner-lost");if(p)return B("payload","unsolicited-no-carries-no-sequence")}let f={k:"no",code:c};if(l){let y=t("q",fe);if(v(y))return y.refusal;f.q=y}if(u){let y=t("h",G);if(v(y))return y.refusal;f.h=y}if(p){let y=r("s");if(v(y))return y.refusal;f.s=y}if(Object.prototype.hasOwnProperty.call(e,"detail")){let y=e.detail;if(typeof y!="string")return B("payload","bad-string:detail");if(U(y)>es)return B("payload","detail-too-long","capacity");f.detail=y}return{ok:!0,message:f}}}}function ds(n){if(!Array.isArray(n))return L("payload","bad-ops");if(n.length>an)return L("payload","ops-too-many","capacity");let e=[];for(let t of n){if(typeof t!="object"||t===null||Array.isArray(t))return L("payload","bad-op");let r=t,i=r.o;if(i!=="r"&&i!=="x")return L("payload","bad-op-kind");let s=i==="r"?["o","p","val"]:["o","p"];for(let d of Object.keys(r))if(!s.includes(d))return L("payload","unknown-field");if(i==="r"&&!Object.prototype.hasOwnProperty.call(r,"val"))return L("payload","missing-field");let o=r.p;if(!Array.isArray(o))return L("payload","bad-path");if(o.length>ln)return L("payload","path-too-deep","capacity");let a=[];for(let d of o){if(typeof d!="string"||d.length===0)return L("payload","bad-segment");if(U(d)>Ge)return L("payload","segment-too-long","capacity");a.push(d)}e.push(i==="r"?{o:i,p:a,val:r.val}:{o:i,p:a})}return e}function us(n){for(let e=0;e<n.length;e+=1){let t=n.charCodeAt(e),r=t>=48&&t<=57,i=t>=97&&t<=102;if(!r&&!i)return!1}return n.length>0}function pr(n){if(n.length===0||n.length>ns)return!1;for(let e=0;e<n.length;e+=1){let t=n.charCodeAt(e);if(t<48||t>57)return!1}return n.length>1&&n.charCodeAt(0)===48?!1:BigInt(n)<=ts}function cn(n){if(n.length===0)return!0;if(n.length%4!==0||!ls.test(n))return!1;let e=n.endsWith("==")?2:n.endsWith("=")?1:0;if(e===0)return!0;let t=n.charCodeAt(n.length-e-1),r=ps(t);return r<0?!1:(r&(e===2?15:3))===0}function ps(n){return n>=65&&n<=90?n-65:n>=97&&n<=122?n-97+26:n>=48&&n<=57?n-48+52:n===43?62:n===47?63:-1}function ae(n){if(!pr(n))throw new RangeError(`not a canonical decimal: ${JSON.stringify(n)}`);return BigInt(n)}function dn(n,e){return sn(n,e,new Set)}function sn(n,e,t){if(n===null)return null;switch(typeof n){case"boolean":case"string":return null;case"number":return Number.isFinite(n)?null:`non-finite-number:${e}`;case"object":{let r=n;if(t.has(r))return`circular:${e}`;if("toJSON"in r)return`to-json-transform:${e}`;if(r instanceof Map||r instanceof Set||r instanceof WeakMap||r instanceof WeakSet)return`map-or-set:${e}`;if(Object.getOwnPropertySymbols(r).length>0)return`symbol-key:${e}`;t.add(r);try{if(Array.isArray(n)){for(let i=0;i<n.length;i+=1){let s=sn(n[i],`${e}[${i}]`,t);if(s!==null)return s}return null}for(let[i,s]of Object.entries(n)){let o=sn(s,`${e}.${i}`,t);if(o!==null)return o}return null}finally{t.delete(r)}}default:return`not-json:${e}`}}function fs(n){switch(n.k){case"act":case"in":return[["in",n.in]];case"res":return[["out",n.out]];case"delta":return n.ops.flatMap((e,t)=>e.o==="r"?[[`ops[${t}].val`,e.val]]:[]);default:return[]}}function R(n){for(let[o,a]of fs(n)){let d=dn(a,o);if(d!==null)throw new RangeError(`refusing to encode an invalid ${n.k}: ${d}`)}let e={v:cr,k:n.k},t=n;for(let o of os[n.k]){if(o==="v"||o==="k"||!Object.prototype.hasOwnProperty.call(t,o))continue;let a=t[o];a!==void 0&&(e[o]=a)}let r=JSON.stringify(e),i=rn.has(n.k)?"owner":"replica",s=Me(r,{maxBytes:Number.MAX_SAFE_INTEGER,as:i});if(!s.ok)throw new RangeError(`refusing to encode an invalid ${n.k}: ${s.reason}`);return r}var hs=192,fr=1024,hr=197;function ys(n){return Math.floor((n-hs)/4)*3}function gr(n){if(!Number.isFinite(n)||!Number.isInteger(n)||n<=0)throw new h("capacity",`the transport reported no usable event size (${String(n)})`);if(hr>n)throw new h("capacity",`the frozen envelopes need ${hr} B and the transport allows ${n} B`);let e=ys(n);if(e<fr)throw new h("capacity",`a ${n} B event leaves ${e} B per chunk, below the ${fr} B floor`);if(e*oe<Se)throw new h("capacity",`a ${n} B event leaves ${e} B per chunk: ${oe} of them cover ${e*oe} B, below the ${Se} B snapshot bound`);return e}function mr(n,e){if(e<1)throw new h("capacity",`a chunk budget of ${e} B cannot carry anything`);try{let s=dn(n,"state");if(s!==null)throw new h("invalid-data",`the projected state is not JSON: ${s}`)}catch(s){throw s instanceof h?s:new h("invalid-data",`the projected state is not JSON: ${String(s)}`,{cause:s})}let t;try{t=JSON.stringify(n)}catch(s){throw new h("invalid-data","the projected state is not JSON",{cause:s})}if(t===void 0)throw new h("invalid-data","the projected state is not JSON");let r=new TextEncoder().encode(t);if(r.length>Se)throw new h("capacity",`the projection is ${r.length} B and the bound is ${Se} B`);let i=[];for(let s=0;s<r.length;s+=e)i.push(gs(r.subarray(s,s+e)));if(i.length>oe)throw new h("capacity",`the projection needs ${i.length} chunks and the bound is ${oe}`);return{bytes:r.length,n:i.length,pieces:i}}var yr=32768;function gs(n){let e="";for(let t=0;t<n.length;t+=yr)e+=String.fromCharCode(...n.subarray(t,t+yr));return btoa(e)}function br(n){let e=atob(n),t=new Uint8Array(e.length);for(let r=0;r<e.length;r+=1)t[r]=e.charCodeAt(r);return t}var pn=1e4,ms=8*1024*1024;function V(n,e,t="invalid-data"){return{ok:!1,code:t,reason:n,fatal:e}}var un=class{constructor(e,t){this.manifest=e;this.openedAt=t;this.pieces=new Array(e.n),this.encoded=new Array(e.n)}manifest;openedAt;pieces;encoded;admitted=0;held=0;closed=!1;get bytesHeld(){return this.held}get bytesReserved(){return this.closed?0:Math.max(Number(this.manifest.bytes),this.held)}get have(){return this.admitted}get reclaimed(){return this.closed}reclaim(){this.closed=!0,this.pieces.fill(void 0),this.encoded.fill(void 0),this.admitted=0,this.held=0}expired(e){return e-this.openedAt>=pn}accept(e,t,r){if(this.closed)return V("chunk-wrong-assembly",!1);if(this.expired(r))return this.reclaim(),V("deadline",!0,"timeout");let i=this.manifest;if(e.h!==i.h||e.g!==i.g||e.r!==i.r||e.n!==i.n)return V("chunk-wrong-assembly",!1);if(!Number.isInteger(e.i)||e.i<0||e.i>=i.n)return V("chunk-index",!1);if(!cn(e.d))return V("chunk-non-canonical",!1);let s=this.encoded[e.i];if(s!==void 0)return s===e.d?{ok:!0,done:!1,have:this.admitted}:(this.reclaim(),V("chunk-conflict",!0));let o=br(e.d),a=Number(i.bytes);if(this.held+o.length>a)return this.reclaim(),V("byte-total-mismatch",!0);if(this.encoded[e.i]=e.d,this.pieces[e.i]=o,this.admitted+=1,this.held+=o.length,this.admitted<i.n)return{ok:!0,done:!1,have:this.admitted};if(this.held!==a)return this.reclaim(),V("byte-total-mismatch",!0);let d=new Uint8Array(this.held),c=0;for(let p of this.pieces){if(p===void 0)return this.reclaim(),V("byte-total-mismatch",!0);d.set(p,c),c+=p.length}let l=new TextDecoder("utf-8",{fatal:!0}),u;try{let p=De(l.decode(d));if(!p.ok)return this.reclaim(),V("assembled-not-json",!0);u=p.value}catch{return this.reclaim(),V("assembled-not-json",!0)}try{t(u)}catch{return this.reclaim(),V("assembled-invalid",!0)}return this.reclaim(),{ok:!0,done:!0,document:u}}},At=class n{constructor(e=ms){this.maxTotalBytes=e}maxTotalBytes;live=new Map;static key(e,t){return`${e}/${t}`}get bytesHeld(){let e=0;for(let t of this.live.values())e+=t.bytesHeld;return e}get bytesReserved(){let e=0;for(let t of this.live.values())e+=t.bytesReserved;return e}get size(){return this.live.size}get(e,t){return this.live.get(n.key(e,t))}open(e,t){if(!Number.isInteger(e.n)||e.n<1||e.n>oe)return V("manifest-chunk-count",!0);let r=Number(e.bytes);if(!Number.isSafeInteger(r)||r<0||r>Se)return V("manifest-bytes",!0,"capacity");let i=n.key(e.h,e.g),s=this.live.get(i),o=s?.bytesReserved??0;if(this.bytesReserved-o+r>this.maxTotalBytes)return V("assembly-too-large",!0,"capacity");s?.reclaim(),this.live.delete(i);let a=new un(e,t);return this.live.set(i,a),a}reclaim(e,t){let r=n.key(e,t);this.live.get(r)?.reclaim(),this.live.delete(r)}reclaimHandle(e){for(let[t,r]of[...this.live])t.startsWith(`${e}/`)&&(r.reclaim(),this.live.delete(t))}sweep(e){let t=0;for(let[r,i]of[...this.live])i.expired(e)&&(i.reclaim(),this.live.delete(r),t+=1);return t}clear(){for(let e of this.live.values())e.reclaim();this.live.clear()}};function le(n,e){if(Object.is(n,e))return e;if(Array.isArray(e)){let t=e;if(!Array.isArray(n))return wr(t,void 0);let r=wr(t,n);return n.length===t.length&&bs(n,r)?n:r}if(Sr(e)){if(!Sr(n))return vr(e,void 0);let t=vr(e,n),r=Object.keys(e);return r.length===Object.keys(n).length&&r.every(i=>Or(n,i)&&Object.is(n[i],t[i]))?n:t}return e}function Rt(n,e){let t=Object.keys(e);if(t.length===0)return n;let r=!1,i={...n};for(let s of t){let o=xr(n,s),a=le(o,e[s]);Object.is(o,a)||(Object.defineProperty(i,s,{value:a,enumerable:!0,writable:!0,configurable:!0}),r=!0)}return r?Object.freeze(i):n}function Sr(n){if(typeof n!="object"||n===null||Array.isArray(n))return!1;let e=Object.getPrototypeOf(n);return e===Object.prototype||e===null}function bs(n,e){for(let t=0;t<e.length;t+=1)if(!Object.is(n[t],e[t]))return!1;return!0}function wr(n,e){let t=new Array(n.length);for(let r=0;r<n.length;r+=1)t[r]=le(e?.[r],n[r]);return Object.freeze(t)}function Or(n,e){return Object.prototype.hasOwnProperty.call(n,e)}function xr(n,e){if(n!==void 0)return Or(n,e)?n[e]:void 0}function vr(n,e){let t={};for(let r of Object.keys(n))Object.defineProperty(t,r,{value:le(xr(e,r),n[r]),enumerable:!0,writable:!1,configurable:!1});return Object.freeze(t)}var Ss=["__proto__","constructor","prototype"],ws=new Set(Ss);function ce(n,e,t="invalid-data"){return{ok:!1,code:t,reason:n,resync:e}}function kr(n,e,t){if(e.length>an)return ce("ops-too-many",!1,"capacity");for(let a of e){if(a.p.length>ln)return ce("path-too-deep",!1,"capacity");for(let d of a.p){if(U(d)>Ge)return ce("segment-too-long",!1,"capacity");if(ws.has(d))return ce("segment-forbidden",!1)}if(a.o==="x"&&a.p.length===0)return ce("root-remove",!1)}let r=n,i=new WeakSet;for(let a of e){if(a.p.length===0){a.o==="r"&&(r=a.val);continue}if(!Rr(r))return ce("parent-not-object",!0);let d=_r(r,i);r=d;let c=vs(d,a.p.slice(0,-1),i);if(c===Er)return ce("missing-parent",!0);if(c===Ar)return ce("parent-not-object",!0);let l=c,u=a.p[a.p.length-1];if(a.o==="x"){if(!Object.prototype.hasOwnProperty.call(l,u))return ce("missing-key",!0);delete l[u];continue}l[u]=a.val}let s;try{s=t(r)}catch{return ce("invalid-state",!0)}let o=le(n,s);return{ok:!0,next:o,changed:!Object.is(o,n)}}var Er=Symbol("missing-parent"),Ar=Symbol("parent-not-object");function vs(n,e,t){let r=n;for(let i of e){let s=r;if(!Object.prototype.hasOwnProperty.call(s,i))return Er;let o=s[i];if(!Rr(o))return Ar;let a=_r(o,t);s[i]=a,r=a}return r}function Rr(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function _r(n,e){if(e.has(n))return n;let t=Object.assign(Object.create(null),n);return e.add(t),t}var he=class{#e;#t=new Set;#s=new Set;#n;#r;#b=0;#l=null;#o=0;#u=!1;constructor(e){this.#e=e.definition,this.#n=le(void 0,this.#d(e.initialState)),this.#r=Object.freeze({phase:e.phase??"ready",stale:!1,error:null})}getState(){return this.#n}get revision(){return this.#b}get inTransaction(){return this.#l!==null&&this.#l.active}subscribe(e,t,r){let i=t===void 0?this.#y(e):this.#O(e,t,r);this.#t.add(i);let s=!0;return()=>{s&&(s=!1,this.#t.delete(i))}}getStatus(){return this.#r}subscribeStatus(e){this.#s.add(e);let t=!0;return()=>{t&&(t=!1,this.#s.delete(e))}}setStatus(e){let t=this.#r,r={phase:e.phase??t.phase,stale:e.stale??t.stale,error:e.error===void 0?t.error:e.error};if(!(r.phase===t.phase&&r.stale===t.stale&&Object.is(r.error,t.error))){this.#r=Object.freeze(r);for(let i of[...this.#s])this.#s.has(i)&&_t(()=>i(this.#r,t))}}transact(e,t){if(this.#a(),this.#l!==null)throw new h("action-rejected","a store transaction is already open on this store; handlers are synchronous and must not nest");let r={staged:this.#n,active:!0};this.#l=r;try{let i=e(this.#c(r,t));if(Os(i))throw new h("action-rejected","a store handler returned a thenable; handlers are synchronous so that a throw can discard the whole transaction");return this.#m(r.staged),i}finally{r.active=!1,this.#l=null}}applyOwnerUpdate(e){this.#a();let t=this.#l;if(t!==null&&t.active){t.staged=this.#f(t.staged,e);return}let r=this.#f(this.#n,e);this.#m(r)}applySnapshot(e){this.#a();let t=this.#l;if(t!==null&&t.active){t.staged=this.#d(e);return}this.#m(this.#d(e))}applyEntities(e,t){this.#a();let r=this.#e.entities?.[e];if(r===void 0||!Object.prototype.hasOwnProperty.call(this.#e.entities,e))throw new h("invalid-data",`store '${this.#e.id}' declares no per-entity parser for '${e}'; declare it in \`entities\` or write through setState`);let i=this.#l,s=i!==null&&i.active?i.staged:this.#n,o=s[e];if(o!==void 0&&!tn(o))throw new h("invalid-data",`store '${this.#e.id}': '${e}' is not an entity map in the current state`);let a=[];for(let p of Object.keys(t)){if(p.length===0)throw new h("invalid-data",`store '${this.#e.id}': an entity id in '${e}' is empty`);let f=t[p];if(f===void 0){a.push([p,void 0]);continue}try{a.push([p,this.runReadOnly(()=>r(f))])}catch(y){throw y instanceof h?y:new h("invalid-data",`entity '${e}.${p}' failed the '${this.#e.id}' entity validator: ${String(y)}`,{cause:y})}}if(i!==null&&i.active){let p={...o??{}};for(let[f,y]of a)y===void 0?delete p[f]:fn(p,f,y);i.staged=Rt(s,{[e]:p});return}let d=!1,c=[];for(let[p,f]of a){let y=o!==void 0&&Object.prototype.hasOwnProperty.call(o,p),O=y?o[p]:void 0;if(f===void 0){y&&(d=!0),c.push([p,void 0]);continue}let _=le(O,f);Object.is(O,_)||(d=!0),c.push([p,_])}if(!d)return;let l={...o??{}};for(let[p,f]of c)f===void 0?delete l[p]:fn(l,p,f);let u={...s};fn(u,e,Object.freeze(l)),this.#p(Object.freeze(u))}applyDelta(e){this.#a();let t=kr(this.#n,e,r=>this.#d(r));return t.ok&&t.changed&&this.#h(t.next),t}runReadOnly(e){this.#o+=1;try{return e()}finally{this.#o-=1}}close(){this.#u||(this.#u=!0,this.setStatus({phase:"closed",stale:!0}),this.#t.clear(),this.#s.clear())}#c(e,t){return{peer:t,getState:()=>(this.#w(e),e.staged),setState:r=>{if(this.#w(e),this.#o>0)throw new h("action-rejected","a read-only store callback may not write state; validators, authorize, project and update functions run with setters fenced");e.staged=this.#f(e.staged,r)}}}#f(e,t){let r=typeof t=="function"?this.runReadOnly(()=>t(e)):t;return Rt(e,r)}#m(e){this.#h(this.#d(e))}#h(e){let t=le(this.#n,e);Object.is(t,this.#n)||this.#p(t)}#p(e){let t=this.#n;this.#n=e,this.#b+=1;for(let r of[...this.#t])this.#t.has(r)&&r.notify(e,t)}#d(e){try{return this.runReadOnly(()=>this.#e.state(e))}catch(t){throw t instanceof h?t:new h("invalid-data",`state failed the '${this.#e.id}' validator: ${String(t)}`,{cause:t})}}#y(e){return{notify:(t,r)=>{_t(()=>e(t,r))}}}#O(e,t,r){let i=r?.equality??Object.is,s=this.runReadOnly(()=>e(this.#n));return r?.fireImmediately===!0&&_t(()=>t(s,s)),{notify:o=>{let a=this.runReadOnly(()=>e(o)),d=s;i(a,d)||(s=a,_t(()=>t(a,d)))}}}#w(e){if(!e.active)throw new h("action-rejected","this store transaction has already ended; its context cannot read or write from a later turn")}#a(){if(this.#u)throw new h("closed","this store handle is closed")}};function Os(n){return n===null||typeof n!="object"&&typeof n!="function"?!1:typeof n.then=="function"}function _t(n){try{n()}catch(e){console.error("[@net-mesh/browser] store listener threw",e)}}function fn(n,e,t){Object.defineProperty(n,e,{value:t,enumerable:!0,writable:!0,configurable:!0})}var xs=32,ks=64*1024,Es=6e4,As=2048,Rs=(1n<<64n)-1n,_s="";function Pr(n,e){return`${n}${_s}${hn(e)}`}function hn(n){if(n===null||typeof n=="boolean")return String(n);if(typeof n=="number"){if(!Number.isFinite(n))throw new h("invalid-data","a canonical request cannot contain a non-finite number");return String(n)}if(typeof n=="string")return JSON.stringify(n);if(Array.isArray(n))return`[${n.map(i=>hn(i)).join(",")}]`;let e=n;return`{${Object.keys(e).sort().map(i=>`${JSON.stringify(i)}:${hn(e[i])}`).join(",")}}`}function Ps(n){return new TextEncoder().encode(n).byteLength}function mn(n){return Ps(n)>As}function jr(n){if(mn(n))throw new h("invalid-data","this canonical form needs the digest path");return{form:"inline",value:n}}async function Ir(n){let e=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(n)),t=new Uint8Array(e),r="";for(let i of t)r+=i.toString(16).padStart(2,"0");return{form:"digest",value:r}}function js(n,e){return n.form===e.form&&n.value===e.value}var yn=class{constructor(e=xs,t=ks,r=Es){this.maxEntries=e;this.maxBytes=t;this.maxAgeMs=r}maxEntries;maxBytes;maxAgeMs;#e=0n;#t=new Map;#s=0;get floor(){return this.#e.toString()}get size(){return this.#t.size}get bytesHeld(){return this.#s}disposition(e,t,r){if(this.expire(r),e>=Rs)return{kind:"exhausted"};let i=this.#t.get(e.toString());return i!==void 0?js(i.binding,t)?{kind:"replay",outcome:i.outcome}:{kind:"conflict"}:e<=this.#e?{kind:"expired"}:{kind:"execute"}}retain(e,t,r,i){let s=Is(t,r);this.#t.set(e.toString(),{s:e,binding:t,outcome:r,bytes:s,at:i}),this.#s+=s,this.evict(i)}expire(e){for(let t of this.ordered()){if(e-t.at<this.maxAgeMs)break;this.drop(t)}}evict(e){for(this.expire(e);this.#t.size>this.maxEntries||this.#s>this.maxBytes;){let t=this.ordered()[0];if(t===void 0)return;this.drop(t)}}drop(e){this.#t.delete(e.s.toString()),this.#s-=e.bytes,e.s>this.#e&&(this.#e=e.s)}ordered(){return[...this.#t.values()].sort((e,t)=>e.s<t.s?-1:e.s>t.s?1:0)}};function Is(n,e){let t=e.kind==="result"?JSON.stringify(e.out):e.code;return U(n.value)+U(t)}var gn=class{#e=new Map;#t=0;get dropped(){return this.#t}admit(e,t){let r=this.#e.get(e);return r!==void 0&&t<=r?(this.#t+=1,!1):(this.#e.set(e,t),!0)}latest(e){let t=this.#e.get(e);return t===void 0?null:t.toString()}},Pt=class{#e=new Map;#t=new Map;ledger(e){let t=this.#e.get(e);return t===void 0&&(t=new yn,this.#e.set(e,t)),t}inputs(e){let t=this.#t.get(e);return t===void 0&&(t=new gn,this.#t.set(e,t)),t}forget(e){this.#e.delete(e),this.#t.delete(e)}get size(){return this.#e.size}};var Cs=32,Hs=256,Cr=6e4,Tr=256;function ye(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}var Ls="0".repeat(16),Ts="0".repeat(32),jt=class{constructor(e){this.deps=e;if(this.chunkBytes=gr(e.maxEventBytes),this.incarnation=e.newIncarnation(),this.incarnation.length!==on)throw new h("invalid-data","newIncarnation must return 16 lowercase hex");let t=(typeof e.project=="function"?1:0)+(typeof e.projectFor=="function"?1:0),r=e.definition.visibility;if(t>1||t===0&&r===void 0)throw new h("invalid-data","a host needs one of `project` and `projectFor`, or a definition that declares `visibility`");this.visibility=r===void 0?null:Le(r),this.perPlayer=typeof e.projectFor=="function"||this.visibility?.perPlayer===!0,this.core=new he({definition:e.definition,initialState:e.definition.empty()})}deps;handles=new Map;counters={};chunkBytes;incarnation;core;pending=0;ledgers=new Pt;deferred=new Map;revisionBeforeCommit=0;perPlayer;visibility;warned=new Set;warnOnce(e){if(!(this.deps.warn===void 0||this.warned.has(e))){this.warned.add(e);try{this.deps.warn(e)}catch{}}}viewKey(e,t){return this.perPlayer?JSON.stringify([e,t]):JSON.stringify(t)}get sparseViews(){return this.sparseViewCount}sparseViewCount=0;snapshotCounters(){return{...this.counters}}get handleCount(){return this.handles.size}handle(e){return this.handles.get(e)}commit(e){let t=this.core.inTransaction,r=this.core.getState();if(t||(this.revisionBeforeCommit=this.core.revision),this.core.applySnapshot(e),t)return this.accept([]);let i=this.core.getState();return Object.is(r,i)?this.accept([]):this.accept(this.propagate(r,i))}commitEntities(e,t){let r=this.core.inTransaction,i=this.core.getState();if(r||(this.revisionBeforeCommit=this.core.revision),this.core.applyEntities(e,t),r)return this.accept([]);let s=this.core.getState();return Object.is(i,s)?this.accept([]):this.accept(this.propagate(i,s))}propagate(e,t){let r=[],i=String(this.core.revision),s=new Map,o=new Map,a;for(let d of[...this.handles.values()]){if(this.deferred.has(d.h))continue;if(!this.permitsRead(d.peer,d.audience)){this.forget(d.h,"refused"),r.push(this.no(d.peer,d.h,"closed",null));continue}let c=this.viewKey(d.peer,d.audience),l;if(this.interestFns.length>0&&d.interest!==null){let f=s.get(c);if(f===void 0){if(a===void 0&&(a=this.entityDelta(e,t)),f=a===null?void 0:this.sparseInterestDiff(d.peer,d.audience,a),f===void 0){let y=this.project(d.peer,d.audience,e),O=this.project(d.peer,d.audience,t);f=y===null||O===null?null:this.interestDiff(y,O)}else this.sparseViewCount+=1;s.set(c,f)}l=f===null?null:this.interestOps(f,d.interest)}else if(l=o.get(c),l===void 0){let f=this.project(d.peer,d.audience,e),y=this.project(d.peer,d.audience,t);l=f===null||y===null?null:Hr(f,y),o.set(c,l)}if(l===null){this.forget(d.h),r.push(this.no(d.peer,d.h,"closed",null));continue}if(l.length===0)continue;let u=Lr({k:"delta",h:d.h,g:String(d.generation),base:String(d.revision),r:i,ops:l},this.deps.maxEventBytes);if(u!==null){r.push({peer:d.peer,h:d.h,frame:u}),this.handles.set(d.h,{...d,revision:this.core.revision});continue}let p=this.install(d,null);if(p===null){this.forget(d.h),r.push(this.no(d.peer,d.h,"closed",null));continue}r.push(...p)}return r}getState(){return this.core.getState()}subscribe(e){return this.core.subscribe((t,r)=>{e(t,r)})}get currentRevision(){return this.core.revision}localRead(e,t){return this.permitsRead(e,t)}localView(e,t,r=null){let i=this.project(e,t);return i===null?null:this.filterInterest(i,r)}localAct(e,t,r){if(!Object.prototype.hasOwnProperty.call(this.deps.definition.actions,e))return{outcome:{kind:"refusal",code:"invalid-data"},dispatched:this.refuse("local-act-unknown-name")};if(!this.permitsAction(r,e,t))return{outcome:{kind:"refusal",code:"forbidden"},dispatched:this.refuse("local-act-forbidden")};let i=this.deps.definition.actions[e],s=this.core.getState();this.revisionBeforeCommit=this.core.revision;let o;try{let c=this.deps.actions[e];o={kind:"result",out:this.core.transact(u=>{let p=i.output(c(i.input(t),u)),f=R({k:"res",q:Ls,h:Ts,s:"1",out:p});if(U(f)>this.deps.maxEventBytes)throw new h("capacity","the result does not fit the message budget");return p},r)}}catch(c){o={kind:"refusal",code:c instanceof h&&c.code==="capacity"?"capacity":"action-rejected"}}let a=this.core.getState(),d=Object.is(s,a)?[]:this.propagate(s,a);return{outcome:o,dispatched:o.kind==="refusal"?this.refuse(`local-act-${o.code}`,d):this.accept(d)}}localInput(e,t,r){if(!Object.prototype.hasOwnProperty.call(this.deps.definition.inputs,e))return this.refuse("local-in-unknown-name");if(!this.permitsInput(r,e,t))return this.refuse("local-in-forbidden");let i=this.core.getState();this.revisionBeforeCommit=this.core.revision;try{this.core.transact(o=>{let a=this.deps.definition.inputs[e],d=this.deps.inputs[e];d(a(t),o)},r)}catch{return this.refuse("local-in-rejected")}let s=this.core.getState();return this.accept(Object.is(i,s)?[]:this.propagate(i,s))}receive(e,t,r=this.deps.now()){let i=Me(e,{maxBytes:this.deps.maxEventBytes,as:"owner"});if(!i.ok)return this.refuse(i.reason,[]);let s=i.message;if(s.k==="join")return this.join(s,t,r);let o=this.bind(s.h,t,r);if(typeof o=="string")return this.refuse(o,[this.no(t,s.h,"closed",qs(s))]);switch(s.k){case"alive":return this.handles.set(o.h,{...o,lastSeen:r}),this.accept([{peer:t,h:o.h,frame:R({k:"ok",q:s.q,h:o.h})}]);case"leave":return this.forget(o.h,"left"),this.accept([{peer:t,h:o.h,frame:R({k:"ok",q:s.q,h:o.h})}]);case"int":return this.interestChange(s,o,t,r);case"act":return this.action(s,o,t,r);case"in":return this.input(s,o,t,r);case"resync":{if(!this.permitsRead(t,o.audience))return this.refuse("resync-forbidden",[this.no(t,o.h,"forbidden",s.q)]);let a={...o,lastSeen:r};this.handles.set(o.h,a);let d=this.install(a,s.q);return d===null?(this.forget(o.h),this.refuse("resync-projection-capacity",[this.no(t,o.h,"capacity",s.q)])):this.accept(d)}case"aud":case"resume":{if(!this.permitsRead(t,s.aud))return this.refuse(`${s.k}-forbidden`,[this.no(t,o.h,"forbidden",s.q)]);let a={...o,audience:[...s.aud],interest:s.k==="resume"&&s.int!==void 0?[...s.int]:o.interest,lastSeen:r};if(this.handles.set(a.h,a),!this.deps.canProject())return this.deferred.set(a.h,{q:s.q,peer:t}),this.accept([]);let d=this.install(a,s.q);return d===null?(this.forget(a.h),this.refuse(`${s.k}-projection-capacity`,[this.no(t,a.h,"capacity",s.q)])):this.accept(d)}default:return this.refuse("unreachable-kind")}}action(e,t,r,i){let s=e.name;if(!Object.prototype.hasOwnProperty.call(this.deps.definition.actions,s))return this.refuse("act-unknown-name",[this.no(r,t.h,"invalid-data",e.q)]);let o;try{o=Pr(s,e.in)}catch{return this.refuse("act-uncanonical",[this.no(r,t.h,"invalid-data",e.q)])}if(!mn(o))return this.decide(e,t,r,i,jr(o));if(this.pending>=Cs)return this.refuse("act-pending-bound",[this.no(r,t.h,"capacity",e.q)]);this.pending+=1;let a=Ir(o).then(d=>{let c=this.deps.now(),l=this.bind(e.h,r,c);return typeof l=="string"?this.refuse(l,[this.no(r,e.h,"closed",e.q)]):this.decide(e,l,r,c,d)}).catch(()=>this.refuse("act-digest-failed",[this.no(r,e.h,"indeterminate",e.q)])).finally(()=>{this.pending-=1});return{out:[],refused:null,deferred:a}}decide(e,t,r,i,s){let o=this.ledgers.ledger(t.h),a=ae(e.s),d=o.disposition(a,s,i);switch(d.kind){case"exhausted":return this.refuse("act-sequence-exhausted",[this.no(r,t.h,"capacity",e.q)]);case"conflict":return this.refuse("act-binding-mismatch",[this.no(r,t.h,"invalid-data",e.q)]);case"expired":return this.refuse("act-result-expired",[this.no(r,t.h,"result-expired",e.q)]);case"replay":return this.permitsAction(r,e.name,e.in)?(this.renew(t,i),this.accept([this.reply(t,r,e.q,a,d.outcome)])):this.refuse("act-forbidden-replay",[this.no(r,t.h,"forbidden",e.q)]);case"execute":break}if(!this.permitsAction(r,e.name,e.in))return o.retain(a,s,{kind:"refusal",code:"forbidden"},i),this.renew(t,i),this.refuse("act-forbidden",[this.no(r,t.h,"forbidden",e.q)]);let c=this.deps.definition.actions[e.name],l=this.core.getState();this.revisionBeforeCommit=this.core.revision;let u;try{let y=this.deps.actions[e.name];u={kind:"result",out:this.core.transact(_=>{let P=c.input(e.in),M=c.output(y(P,_)),H=R({k:"res",q:e.q,h:t.h,s:e.s,out:M});if(U(H)>this.deps.maxEventBytes)throw new h("capacity","the result does not fit the message budget");return M},r)}}catch(y){u={kind:"refusal",code:y instanceof h&&y.code==="capacity"?"capacity":"action-rejected"}}o.retain(a,s,u,i),this.renew(t,i);let p=this.core.getState(),f=Object.is(l,p)?[]:this.propagate(l,p);return this.accept([this.reply(t,r,e.q,a,u),...f])}input(e,t,r,i){let s=e.name;if(!Object.prototype.hasOwnProperty.call(this.deps.definition.inputs,s))return this.refuse("in-unknown-name");if(!this.ledgers.inputs(t.h).admit(s,ae(e.s)))return this.refuse("in-stale-sequence");if(!this.permitsInput(r,s,e.in))return this.refuse("in-forbidden");let o=this.core.getState();this.revisionBeforeCommit=this.core.revision;try{this.core.transact(d=>{let c=this.deps.definition.inputs[s],l=this.deps.inputs[s];l(c(e.in),d)},r)}catch{return this.refuse("in-rejected")}this.renew(t,i);let a=this.core.getState();return this.accept(Object.is(o,a)?[]:this.propagate(o,a))}reply(e,t,r,i,s){let o=s.kind==="result"?R({k:"res",q:r,h:e.h,s:i.toString(),out:s.out}):R({k:"no",q:r,h:e.h,code:s.code,s:i.toString()});return{peer:t,h:e.h,frame:o}}permitsAction(e,t,r){let i={type:"action",peer:e,name:t,input:r};try{return this.deps.authorize(i)===!0}catch{return!1}}permitsInput(e,t,r){let i={type:"input",peer:e,name:t,input:r};try{return this.deps.authorize(i)===!0}catch{return!1}}renew(e,t){let r=this.handles.get(e.h);r!==void 0&&this.handles.set(e.h,{...r,lastSeen:t})}forget(e,t="dropped"){let r=this.handles.get(e);this.handles.delete(e),this.ledgers.forget(e),this.deferred.delete(e),r!==void 0&&(this.presenceChanged(r.peer,t),this.membershipChanged())}present=new Set;localPlayers=new Set;pendingEvents=[];areas=new Map;areasAt=-1;ending=!1;get wantsEvents(){return this.deps.onEvent!==void 0||this.deps.areaOf!==void 0}isPresent(e){if(this.localPlayers.has(e))return!0;for(let t of this.handles.values())if(t.peer===e)return!0;return!1}presenceChanged(e,t,r=[]){if(!this.wantsEvents||this.ending)return;let i=this.isPresent(e),s=this.present.has(e);i!==s&&(i?(this.present.add(e),this.pendingEvents.push(Object.freeze({type:"join",peer:e,audience:Object.freeze([...r])}))):(this.present.delete(e),this.areas.delete(e),this.pendingEvents.push(Object.freeze({type:"leave",peer:e,reason:t??"dropped"}))))}localPresence(e,t,r=[],i="left"){t?this.localPlayers.add(e):this.localPlayers.delete(e),this.presenceChanged(e,t?null:i,r)}detectAreas(){let e=this.deps.areaOf;if(e===void 0||this.ending||this.areasAt===this.core.revision&&[...this.present].every(r=>this.areas.has(r)))return;this.areasAt=this.core.revision;let t=this.core.getState();for(let r of this.present){let i;try{let a=this.core.runReadOnly(()=>e(t,r));i=typeof a=="string"?a:null}catch{i=null}let s=this.areas.has(r),o=s?this.areas.get(r)??null:null;this.areas.set(r,i),(s?o!==i:i!==null)&&this.pendingEvents.push(Object.freeze({type:"area",peer:r,from:o,to:i}))}}drainEvents(){let e=[];if(!this.wantsEvents)return this.accept(e);for(let t=0;;t+=1){this.pendingEvents.length===0&&this.detectAreas();let r=this.pendingEvents.shift();if(r===void 0)break;if(t>=Tr){this.pendingEvents.length=0,this.counters["event-rounds-bound"]=(this.counters["event-rounds-bound"]??0)+1;break}let i=this.deps.onEvent;if(i===void 0)continue;let s=this.core.getState();this.revisionBeforeCommit=this.core.revision;try{this.core.transact(a=>i(r,a),r.peer)}catch{this.counters["event-rejected"]=(this.counters["event-rejected"]??0)+1;continue}let o=this.core.getState();Object.is(s,o)||e.push(...this.propagate(s,o))}return this.accept(e)}membership=new Set;membershipChanged(){for(let e of[...this.membership])try{e()}catch{}}onMembership(e){return this.membership.add(e),()=>{this.membership.delete(e)}}peers(){return[...new Set([...this.handles.values()].map(e=>e.peer))]}reauthorize(){let e=[];for(let t of[...this.handles.values()])this.permitsRead(t.peer,t.audience)||(this.forget(t.h,"refused"),e.push(this.no(t.peer,t.h,"closed",null)));return this.accept(e)}resumeDeferred(e=this.deps.now()){if(!this.deps.canProject())return this.accept([]);let t=[];for(let[r,i]of[...this.deferred]){this.deferred.delete(r);let s=this.bind(r,i.peer,e);if(typeof s=="string"){this.counters[`deferred-${s}`]=(this.counters[`deferred-${s}`]??0)+1;continue}let o=this.install(s,i.q);if(o===null){this.forget(r),t.push(this.no(i.peer,r,"capacity",i.q));continue}t.push(...o)}return this.accept(t)}get deferredCount(){return this.deferred.size}get ledgerCount(){return this.ledgers.size}accept(e,t=null){return{out:e,refused:null,deferred:t}}sweep(e){let t=[];for(let[r,i]of[...this.handles])e-i.lastSeen>=Cr&&(this.forget(r,"expired"),t.push({h:r,peer:i.peer}));return t}farewell(){this.ending=!0,this.pendingEvents.length=0;let e=[];for(let[t,r]of[...this.handles])this.forget(t),e.push(this.no(r.peer,t,"owner-lost",null));return e}get incarnationHex(){return this.incarnation}join(e,t,r){if(e.store!==this.deps.store)return this.refuse("join-other-store",[]);if(e.def!==this.deps.definition.id)return this.refuse("join-wrong-definition",[this.no(t,null,"version-mismatch",e.q)]);if(e.ver!==this.deps.definition.version)return this.refuse("join-wrong-version",[this.no(t,null,"version-mismatch",e.q)]);if(this.handles.size>=Hs)return this.refuse("join-capacity",[this.no(t,null,"capacity",e.q)]);if(!this.permitsRead(t,e.aud))return this.refuse("join-forbidden",[this.no(t,null,"forbidden",e.q)]);let i=this.newHandle();if(i===null||i.length!==G||this.handles.has(i))return this.refuse("join-handle-unusable",[this.no(t,null,"owner-lost",e.q)]);let s={h:i,inc:this.incarnation,peer:t,audience:[...e.aud],interest:e.int===void 0?null:[...e.int],generation:0,revision:this.core.revision,lastSeen:r};this.handles.set(i,s);let o=this.install(s,e.q);return o===null?(this.forget(i),this.refuse("join-projection-capacity",[this.no(t,null,"capacity",e.q)])):(this.presenceChanged(t,null,e.aud),this.membershipChanged(),this.accept(o))}install(e,t){let r=this.project(e.peer,e.audience),i=r===null?null:this.filterInterest(r,e.interest);if(i===null)return null;let s;try{s=mr(i,this.chunkBytes)}catch{return null}let o=e.generation+1;this.handles.set(e.h,{...e,generation:o,revision:this.core.revision});let a=String(o),d=String(this.core.revision),c=[{peer:e.peer,h:e.h,frame:R(t===null?{k:"man",h:e.h,inc:e.inc,g:a,r:d,n:s.n,bytes:String(s.bytes)}:{k:"man",q:t,h:e.h,inc:e.inc,g:a,r:d,n:s.n,bytes:String(s.bytes)})}];for(let l=0;l<s.n;l+=1)c.push({peer:e.peer,h:e.h,frame:R({k:"snap",h:e.h,g:a,r:d,i:l,n:s.n,d:s.pieces[l]})});return c}permitsRead(e,t){let r={type:"read",peer:e,audience:[...t]};try{return this.deps.authorize(r)===!0}catch{return!1}}newHandle(){try{return this.deps.newHandle()}catch{return null}}get interestFns(){return this.#e??=Object.entries(this.deps.definition.interest??{}).map(([e,t])=>[e,t]),this.#e}#e;interestKey(e,t,r){try{let i=this.core.runReadOnly(()=>e(t,r));return typeof i=="string"?i:null}catch{return null}}filterInterest(e,t){if(t===null||this.interestFns.length===0)return e;let r=new Set(t),i={...e};for(let[s,o]of this.interestFns){let a=i[s];if(!ye(a))continue;let d={};for(let[c,l]of Object.entries(a)){let u=this.interestKey(o,l,c);(u===null||r.has(u))&&(d[c]=l)}i[s]=d}return i}entityDelta(e,t){if(this.deps.project!==void 0||this.deps.projectFor!==void 0)return null;let r=this.deps.definition.entities;if(r===void 0)return null;let i=new Set(this.interestFns.map(([d])=>d)),s=e,o=t,a=[];for(let d of new Set([...Object.keys(s),...Object.keys(o)])){let c=Object.prototype.hasOwnProperty.call(s,d)?s[d]:void 0,l=Object.prototype.hasOwnProperty.call(o,d)?o[d]:void 0;if(Object.is(c,l))continue;if(!i.has(d)||!Object.prototype.hasOwnProperty.call(r,d)||!ye(c)||!ye(l))return null;let u=[];for(let p of new Set([...Object.keys(c),...Object.keys(l)])){let f=Object.prototype.hasOwnProperty.call(c,p)?c[p]:void 0,y=Object.prototype.hasOwnProperty.call(l,p)?l[p]:void 0;Object.is(f,y)||u.push(p)}a.push({collection:d,ids:u,before:c,after:l})}return{collections:a}}sparseInterestDiff(e,t,r){let i=Object.freeze({peer:e,audience:Object.freeze([...t])}),s=(f,y,O)=>{Object.defineProperty(f,y,{value:O,enumerable:!0,writable:!0,configurable:!0})},o={},a={};for(let{collection:f,ids:y,before:O,after:_}of r.collections){let P={},M={};for(let H of y)Object.prototype.hasOwnProperty.call(O,H)&&s(P,H,O[H]),Object.prototype.hasOwnProperty.call(_,H)&&s(M,H,_[H]);s(o,f,P),s(a,f,M)}let d=this.visibility===null?o:Te(this.visibility,o,i),c=this.visibility===null?a:Te(this.visibility,a,i),l=new Map(this.interestFns),u=this.deps.definition.entities,p=[];for(let{collection:f,ids:y}of r.collections){let O=d[f],_=c[f];if(!ye(O)||!ye(_))return;let P=u[f],M=l.get(f),H=(k,E)=>{if(k===void 0||!E)return{ok:!0,value:k};try{return{ok:!0,value:this.core.runReadOnly(()=>P(k))}}catch{return{ok:!1,value:void 0}}};for(let k of y){let E=H(Object.prototype.hasOwnProperty.call(O,k)?O[k]:void 0,d!==o),j=H(Object.prototype.hasOwnProperty.call(_,k)?_[k]:void 0,c!==a);if(!E.ok||!j.ok)return;Object.is(E.value,j.value)||E.value!==void 0&&j.value!==void 0&&JSON.stringify(E.value)===JSON.stringify(j.value)||p.push({collection:f,id:k,before:E.value,after:j.value,beforeKey:E.value===void 0?null:this.interestKey(M,E.value,k),afterKey:j.value===void 0?null:this.interestKey(M,j.value,k)})}}return{rest:[],entities:p,whole:[]}}interestDiff(e,t){let r=new Set(this.interestFns.map(([d])=>d)),i=d=>{let c={};for(let[l,u]of Object.entries(d))r.has(l)||(c[l]=u);return c},s=Hr(i(e),i(t)),o=[],a=[];for(let[d,c]of this.interestFns){let l=e[d],u=t[d];if(!ye(l)||!ye(u)){JSON.stringify(l)!==JSON.stringify(u)&&a.push({collection:d,after:u});continue}for(let p of new Set([...Object.keys(l),...Object.keys(u)])){let f=Object.prototype.hasOwnProperty.call(l,p)?l[p]:void 0,y=Object.prototype.hasOwnProperty.call(u,p)?u[p]:void 0;Object.is(f,y)||f!==void 0&&y!==void 0&&JSON.stringify(f)===JSON.stringify(y)||o.push({collection:d,id:p,before:f,after:y,beforeKey:f===void 0?null:this.interestKey(c,f,p),afterKey:y===void 0?null:this.interestKey(c,y,p)})}}return{rest:s,entities:o,whole:a}}interestOps(e,t){let r=new Set(t),i=o=>o===null||r.has(o),s=[...e.rest];for(let o of e.entities){let a=o.before!==void 0&&i(o.beforeKey);o.after!==void 0&&i(o.afterKey)?s.push({o:"r",p:[o.collection,o.id],val:o.after}):a&&s.push({o:"x",p:[o.collection,o.id]})}for(let o of e.whole){let a=this.filterInterest({[o.collection]:o.after},t);s.push({o:"r",p:[o.collection],val:a[o.collection]})}return s}interestChange(e,t,r,i){let s={...t,interest:[...e.int],lastSeen:i};this.handles.set(s.h,s);let o={peer:r,h:t.h,frame:R({k:"ok",q:e.q,h:t.h})};if(this.interestFns.length===0||this.deferred.has(t.h))return this.accept([o]);let a=this.project(r,t.audience);if(a===null)return this.forget(t.h),this.refuse("int-projection-capacity",[this.no(r,t.h,"capacity",e.q)]);let d=this.filterInterest(a,t.interest),c=this.filterInterest(a,s.interest),l=[];for(let[y]of this.interestFns){let O=d[y],_=c[y];if(!(!ye(O)||!ye(_))){for(let P of Object.keys(_))Object.prototype.hasOwnProperty.call(O,P)||l.push({o:"r",p:[y,P],val:_[P]});for(let P of Object.keys(O))Object.prototype.hasOwnProperty.call(_,P)||l.push({o:"x",p:[y,P]})}}if(l.length===0)return this.accept([o]);let u=String(this.core.revision),p=t.revision===this.core.revision?Lr({k:"delta",h:t.h,g:String(t.generation),base:u,r:u,ops:l},this.deps.maxEventBytes):null;if(p!==null)return this.accept([{peer:r,h:t.h,frame:p},o]);let f=this.install(s,null);return f===null?(this.forget(t.h),this.refuse("int-projection-capacity",[this.no(r,t.h,"capacity",e.q)])):this.accept([...f,o])}project(e,t,r=this.core.getState()){try{let i=Object.freeze({peer:e,audience:Object.freeze([...t])}),s=this.deps.projectFor!==void 0?this.deps.projectFor(r,i):this.deps.project!==void 0?this.deps.project(r,t):r;this.visibility===null&&s===r&&this.warnOnce(`store '${this.deps.definition.id}': every player receives the full state. Declare \`visibility: 'open'\` on the definition if that is intended, or rules for what is secret.`);let o=this.visibility===null?s:Te(this.visibility,s,i);if(o===r)return r;try{return this.deps.definition.state(o)}catch(a){throw this.warnOnce(`store '${this.deps.definition.id}': a projection failed the state validator, so the player got empty() \u2014 ${a instanceof Error?a.message:String(a)}`+(this.visibility===null?"":" (a hidden field is the HIDDEN marker: wrap its parser with hiddenOr)")),a}}catch{try{return this.deps.definition.empty()}catch{return null}}}bind(e,t,r){let i=this.handles.get(e);return i===void 0?"handle-unknown":r-i.lastSeen>=Cr?(this.forget(e,"expired"),"handle-expired"):i.peer!==t?"handle-foreign-peer":i}no(e,t,r,i){return{peer:e,h:t,frame:R(i===null?{k:"no",h:t,code:r}:t===null?{k:"no",q:i,code:r}:{k:"no",q:i,h:t,code:r})}}refuse(e,t=[]){return this.counters[e]=(this.counters[e]??0)+1,{out:t,refused:e,deferred:null}}};function Hr(n,e){let t=[];for(let r of Object.keys(e)){let i=e[r];if(Object.prototype.hasOwnProperty.call(n,r)&&Object.is(n[r],i))continue;let s=Object.prototype.hasOwnProperty.call(n,r)?n[r]:void 0,o=s===void 0?null:Ms(r,s,i);if(o!==null){t.push(...o);continue}s!==void 0&&JSON.stringify(s)===JSON.stringify(i)||t.push({o:"r",p:[r],val:i})}for(let r of Object.keys(n))Object.prototype.hasOwnProperty.call(e,r)||t.push({o:"x",p:[r]});return t}var Ds=128;function Ms(n,e,t){let r=a=>typeof a=="object"&&a!==null&&!Array.isArray(a);if(!r(e)||!r(t))return null;let i=[],s=Math.min(Ds,Math.max(1,Math.floor(Object.keys(t).length/2))),o=a=>U(a)<=Ge&&!["__proto__","constructor","prototype"].includes(a);for(let a of Object.keys(t)){let d=t[a];if(!(Object.prototype.hasOwnProperty.call(e,a)&&(Object.is(e[a],d)||JSON.stringify(e[a])===JSON.stringify(d)))&&(!o(a)||(i.push({o:"r",p:[n,a],val:d}),i.length>s)))return null}for(let a of Object.keys(e))if(!Object.prototype.hasOwnProperty.call(t,a)&&(!o(a)||(i.push({o:"x",p:[n,a]}),i.length>s)))return null;return i}function Lr(n,e){let t;try{t=R(n)}catch{return null}return U(t)<=e?t:null}function qs(n){return"q"in n&&typeof n.q=="string"?n.q:null}var Nr=5e3,Dr=500;function $e(n){let e=/^\d+$/.test(n),t=/^(0x)?[0-9a-f]{1,16}$/i.test(n);try{if(e)return BigInt(n).toString(16).padStart(16,"0");if(t)return BigInt(n.startsWith("0x")?n:`0x${n}`).toString(16).padStart(16,"0")}catch{return null}return null}function Sn(n,e){let t=$e(n),r=$e(e);return t!==null&&t===r}var bn=new WeakMap,It=new WeakMap;function Ns(n){try{let e=JSON.parse(n);return e!==null&&typeof e=="object"&&e.k!=="join"&&typeof e.h=="string"?e.h:null}catch{return null}}var Wr=new WeakMap;function Ct(n){return Wr.get(n)}function Mr(n){let e=new Uint8Array(n);crypto.getRandomValues(e);let t="";for(let r of e)t+=r.toString(16).padStart(2,"0");return t}var qr=new TextEncoder,Ws=new TextDecoder;function wn(n){let e=n.streamId??`store/${n.definition.id}`,t=n.store??n.definition.id,r=bn.get(n.transport)??new Set;if(r.has(t))throw new h("invalid-data",`a store named ${t} is already hosted on this transport: name each store of one definition, or a join for that name is ambiguous`);r.add(t),bn.set(n.transport,r);let i=new jt({definition:n.definition,store:t,authorize:n.authorize,project:n.project,projectFor:n.projectFor,onEvent:n.onEvent,areaOf:n.areaOf,warn:n.dev===!0?w=>console.warn(`[@net-mesh/browser] ${w}`):typeof n.dev=="function"?n.dev:void 0,actions:n.actions,inputs:n.inputs,maxEventBytes:n.maxEventBytes,now:n.now??(()=>Date.now()),newHandle:n.newHandle??(()=>Mr(16)),newIncarnation:n.newIncarnation??(()=>Mr(8)),canProject:n.canProject??(()=>!0)});if(n.definition.visibility!==void 0){let w=Te(Le(n.definition.visibility),n.initialState,null);try{n.definition.state(w)}catch(A){throw new h("invalid-data",`store '${n.definition.id}': the state validator rejects a view with secrets hidden \u2014 wrap each field a rule hides with hiddenOr(\u2026): ${A instanceof Error?A.message:String(A)}`,{cause:A})}}i.commit(n.initialState);let s=new Map,o=null,a=new Map,d={},c=!1,l=null;async function u(w){let A=s.get(w);if(A!==void 0)return A;let I=a.get(w);if(I!==void 0)return I;let F=Promise.resolve(n.transport.openStream({reliability:"reliable",peer:w,label:e})).then(g=>{if(a.delete(w),c){try{g.close()}catch{}throw new h("closed","the store closed while its stream was opening")}return s.set(w,g),g}).catch(g=>{throw a.delete(w),g});return a.set(w,F),F}async function p(w){for(let A of w){if(c)return;let I=qr.encode(A.frame),q=await u(A.peer);try{await q.send(I)}catch(F){if(c)return;if(!Ot(F))throw F;if(s.get(A.peer)===q){s.delete(A.peer),a.delete(A.peer),d["reopened-stream"]=(d["reopened-stream"]??0)+1;try{q.close()}catch{}}await(await u(A.peer)).send(I)}}}function f(w){w.catch(()=>{d["send-failed"]=(d["send-failed"]??0)+1})}function y(w){f(p(w.out)),w.deferred!==null&&f(w.deferred.then(A=>y(A))),_()}let O=!1;function _(){if(!(O||c)){O=!0;try{let w=i.drainEvents();w.out.length>0&&f(p(w.out))}finally{O=!1}}}let P=It.get(n.transport)??new Set;P.add(i),It.set(n.transport,P);let M=n.transport.onEvent(w=>{if(w.type!=="stream_data")return;let A=w.peerNode;if(typeof A!="string"||A.length===0){d["no-authenticated-peer"]=(d["no-authenticated-peer"]??0)+1;return}let I=w.payload;if(I===void 0){d["no-payload"]=(d["no-payload"]??0)+1;return}let q=w.streamId;if(o!==null&&q!==void 0&&q!==o){d["foreign-stream"]=(d["foreign-stream"]??0)+1;return}let F;try{F=Ws.decode(I)}catch{d["undecodable-frame"]=(d["undecodable-frame"]??0)+1;return}let g=$e(A);if(g===null){d["unusable-peer"]=(d["unusable-peer"]??0)+1;return}let m=It.get(n.transport);if(m!==void 0&&m.size>1){let x=Ns(F);if(x!==null&&i.handle(x)===void 0){let C=!1;for(let W of m)W!==i&&W.handle(x)!==void 0&&(C=!0);if(C||m.values().next().value!==i){d["sibling-handle"]=(d["sibling-handle"]??0)+1;return}}}let b=i.receive(F,g);q!==void 0&&o===null&&b.refused===null&&(o=q),y(b)}),H=n.schedule??((w,A)=>{let I=setInterval(w,A);return()=>{clearInterval(I)}}),k=H(()=>{if(c)return;let w=(n.now??(()=>Date.now()))(),A=i.sweep(w);A.length>0&&f(p(A.filter(I=>s.has(I.peer)).map(I=>({peer:I.peer,h:I.h,frame:R({k:"no",h:I.h,code:"closed"})})))),y(i.resumeDeferred(w))},Nr);async function E(){c=!0,k(),M();let w=i.farewell();await Promise.all(w.map(async A=>{let I=s.get(A.peer);if(I===void 0){d["farewell-unreachable"]=(d["farewell-unreachable"]??0)+1;return}try{await j(Promise.resolve(I.send(qr.encode(A.frame))))}catch{d["farewell-failed"]=(d["farewell-failed"]??0)+1}}));for(let A of s.values())try{A.close()}catch{d["stream-close-failed"]=(d["stream-close-failed"]??0)+1}s.clear(),a.clear(),bn.get(n.transport)?.delete(t),It.get(n.transport)?.delete(i)}function j(w){return new Promise((A,I)=>{let q=()=>{m(),I(new h("timeout","the farewell did not flush before the deadline"))},F=H(q,Dr),g=setTimeout(q,Dr),m=()=>{F(),clearTimeout(g)};w.then(()=>{m(),A()},b=>{m(),I(b instanceof Error?b:new Error(String(b)))})})}let Y=n.transport.nodeIdHex()??i.incarnationHex,ee=new Set,ie={authority:Y,definition:n.definition,getState:()=>i.getState(),subscribe:w=>i.subscribe(w),setState:w=>{y(i.commit(w))},setEntities:(w,A)=>{y(i.commitEntities(w,A))},setEntity:(w,A,I)=>{let q={};Object.defineProperty(q,A,{value:I,enumerable:!0,writable:!0,configurable:!0}),y(i.commitEntities(w,q))},counts:()=>({handles:i.handleCount,ledgers:i.ledgerCount,deferred:i.deferredCount,sparseViews:i.sparseViews}),counters:()=>({...i.snapshotCounters(),...d}),close:()=>{if(l===null){l=E();for(let w of[...ee])w();ee.clear()}return l}};return Wr.set(ie,{owner:i,peer:$e(Y)??Y,maxEventBytes:n.maxEventBytes,dispatched:y,isClosed:()=>c,onClose:w=>{ee.add(w)}}),ie}var Us=3,Ht=class{constructor(e){this.deps=e;this.#d=[...e.audience],this.#a=e.interest===void 0?null:[...e.interest]}deps;#e="joining";#t=null;#s=null;#n=null;#r=null;#b=null;#l=0n;#o=null;#u=!1;#c=null;#f=null;#m=0;#h=0;#p=null;#d;#y=0;#O=new At;#w={};#a;get interest(){return this.#a===null?null:[...this.#a]}set interest(e){this.#a=e===null?null:[...e]}get desired(){return[...this.#d]}get waiters(){return this.#y}get state(){return this.#e}get handle(){return this.#t}get installed(){return this.#n===null?null:this.#n.toString()}get revision(){return this.#r===null?null:this.#r.toString()}get retired(){return this.#l.toString()}get skipped(){return this.#o===null?null:this.#o.toString()}get dropped(){return{...this.#w}}join(){if(this.#e==="closed")throw new h("closed","a closed replica cannot join again");this.#h+=1,this.#y=1,this.#E();let e=this.deps.newQ();return this.#c=e,this.#f=this.deps.now(),this.#m=0,this.#e="joining",this.deps.core.setStatus({phase:"connecting",stale:this.#v()}),{kind:"join",q:e,frame:R({k:"join",q:e,def:this.deps.definition.id,store:this.deps.store,ver:this.deps.definition.version,key:this.deps.key,aud:[...this.#d],...this.#a===null?{}:{int:[...this.#a]}})}}setAudience(e){if(this.#e==="closed")throw new h("closed","a closed replica cannot change audience");this.#h+=1;let t=[...e];if(this.#e==="installing"&&Bs(t,this.#d))return this.#y+=1,[];this.#d=t;let r=this.#t;if(this.#g(),this.#n=null,this.#r=null,this.#o=null,this.#u=!1,this.deps.core.applySnapshot(this.deps.definition.empty()),this.deps.core.setStatus({phase:"syncing",stale:!1,error:null}),r===null)return this.#y=1,[this.join()];let i=this.deps.newQ();return this.#c=i,this.#f=this.deps.now(),this.#y=1,this.#e="installing",[{kind:"aud",q:i,frame:R({k:"aud",q:i,h:r,aud:t})}]}reconnect(){if(this.#e==="closed")throw new h("closed","a closed replica cannot reconnect");this.#h+=1;let e=this.#t;if(this.#g(),e===null)return[this.join()];let t=this.deps.newQ();return this.#c=t,this.#e="installing",this.deps.core.setStatus({phase:"reconnecting",stale:this.#v()}),[{kind:"resume",q:t,frame:R({k:"resume",q:t,h:e,aud:[...this.#d],...this.#a===null?{}:{int:[...this.#a]}})}]}cancelWaiter(){this.#y>0&&(this.#y-=1),!(this.#y>0)&&this.#e==="installing"&&this.cancel()}receive(e){if(this.#e==="closed")return this.#i("closed");let t=Me(e,{maxBytes:this.deps.maxEventBytes,as:"replica"});if(!t.ok)return this.#i(t.reason);let r=t.message;if("h"in r&&r.h!==void 0&&this.#t!==null&&r.h!==this.#t)return this.#i("foreign-handle");switch(r.k){case"man":return this.#A(r);case"snap":return this.#R(r);case"delta":return this.#P(r);case"no":return this.#j(r.code,r.q);case"ok":case"res":return this.#i("unimplemented-kind")}}tick(){let e=this.deps.now();if(this.#e==="installing"&&this.#p!==null)return this.#p.expired(e)?this.#k("assembly-deadline"):[];if(this.#f===null||e-this.#f<pn)return[];if(this.#e!=="joining"&&this.#e!=="installing")return[];if(this.#m>=Us)return this.#f=null,this.#e="fenced",this.#c=null,this.#g(),this.#S("failed",new h("timeout",`no store named ${this.deps.store} answered the join`)),[];let t=this.#m,r=this.join();return this.#m=t+1,[r]}cancel(){this.#e!=="closed"&&(this.#h+=1,this.#g(),this.#c=null,this.#e="fenced",this.#o=null,this.#u=!1,this.#S("failed"))}#A(e){let t=ae(e.g),r=e.q!==void 0&&e.q===this.#c;if(e.q!==void 0&&!r)return this.#i("stale-correlation");if(t<=this.#l)return this.#i("stale-generation");if(r){if(this.#e!=="joining"&&this.#e!=="installing"&&this.#e!=="fenced")return this.#i("unexpected-manifest")}else{if(this.#e==="fenced")return this.#i("fenced");if(this.#e!=="ready")return this.#o=this.#o===null?t:$s(this.#o,t),this.#i("mid-transition")}if(this.#t===null)this.#t=e.h,this.#s=e.inc;else if(this.#s!==null&&e.inc!==this.#s)return this.#i("foreign-incarnation");this.#g(),this.#l=t;let i={h:e.h,g:e.g,r:e.r,n:e.n,bytes:e.bytes},s=this.#O.open(i,this.deps.now());return"accept"in s?(this.#b=t,this.#p=s,this.#e="installing",this.deps.core.setStatus({phase:"syncing",stale:this.#v()}),{out:[],dropped:null}):{out:this.#k(s.reason),dropped:s.reason}}#R(e){let t=this.#p;if(t===null)return this.#i("no-open-assembly");let r=this.#h,i=t.accept({h:e.h,g:e.g,r:e.r,n:e.n,i:e.i,d:e.d},s=>this.deps.definition.state(s),this.deps.now());return this.#h!==r?this.#i("superseded-installation"):i.ok?i.done?this.#_(i.document,e.g,e.r,r):{out:[],dropped:null}:i.fatal?{out:this.#k(i.reason),dropped:i.reason}:this.#i(i.reason)}#_(e,t,r,i){return this.deps.core.applySnapshot(e),this.#b=null,this.#p=null,this.#O.reclaim(this.#t,t),this.#h!==i?(this.#n=null,this.#r=null,this.#S("failed"),this.#i("superseded-installation")):(this.#n=ae(t),this.#r=ae(r),this.#c=null,this.#e="ready",this.deps.core.setStatus({phase:"ready",stale:!1,error:null}),{out:this.#I(),dropped:null})}#P(e){if(this.#e!=="ready")return this.#u=!0,this.#i("not-ready");let t=ae(e.g),r=this.#n;if(r===null||t!==r)return r!==null&&t>r?{out:this.#x("generation-ahead"),dropped:"generation-ahead"}:this.#i("stale-generation");if(this.#r===null||ae(e.base)!==this.#r)return{out:this.#x("gap"),dropped:"gap"};let i=this.deps.core.applyDelta(e.ops);return i.ok?(this.#r=ae(e.r),{out:[],dropped:null}):{out:this.#x(i.reason),dropped:i.reason}}#j(e,t){if(e==="owner-lost")return this.#g(),this.#e="closed",this.#t=null,this.#S("closed"),{out:[],dropped:"owner-lost"};if(e==="closed"){let r=this.#e==="fenced";return this.#E(),r?(this.#S("failed"),{out:[],dropped:"closed-while-fenced"}):(this.#S("connecting"),{out:[this.join()],dropped:"closed"})}return t===void 0||t!==this.#c?this.#i("stale-correlation"):(this.#g(),this.#c=null,this.#e="fenced",this.#S("failed",new h(e,`the request was refused: ${e}`)),{out:[],dropped:`refused-${e}`})}#k(e){return this.#g(),this.#b=null,this.#e="installing",this.deps.core.setStatus({phase:"syncing",stale:this.#v()}),this.#x(e)}#x(e){let t=this.#t;if(t===null)return[];let r=this.deps.newQ();return this.#c=r,this.#f=this.deps.now(),this.#e="installing",this.#o=null,this.#u=!1,this.deps.core.setStatus({phase:this.#v()?"reconnecting":"syncing",stale:this.#v()}),[{kind:"resync",q:r,frame:R({k:"resync",q:r,h:t,g:this.#n===null?"0":this.#n.toString(),have:this.#r===null?"0":this.#r.toString()})}]}#I(){let e=this.#o,t=this.#u;return!t&&(e===null||this.#n===null||e<=this.#n)?(this.#o=null,this.#u=!1,[]):this.#x(t?"behind":"skipped-refresh")}#E(){this.#g(),this.#t=null,this.#s=null,this.#n=null,this.#r=null,this.#l=0n,this.#o=null,this.#u=!1,this.#c=null}#g(){this.#p!==null&&(this.#p.reclaim(),this.#p=null),this.#t!==null&&this.#O.reclaimHandle(this.#t),this.#b=null}#v(){return this.#n!==null}#S(e,t=null){this.#n=null,this.#r=null,this.deps.core.applySnapshot(this.deps.definition.empty()),this.deps.core.setStatus({phase:e,stale:!1,error:t})}#i(e){return this.#w[e]=(this.#w[e]??0)+1,{out:[],dropped:e}}};function $s(n,e){return n>e?n:e}function Bs(n,e){return n.length===e.length&&n.every((t,r)=>t===e[r])}var $r=2e4,vn=1e4,Js=6e4,Fs=1e3,On=64,Ur=new TextEncoder,Vs=new TextDecoder;function Ye(n){let e=new Uint8Array(n);crypto.getRandomValues(e);let t="";for(let r of e)t+=r.toString(16).padStart(2,"0");return t}function xn(n){let e=n.transport.nodeIdHex();if(e!==null&&Sn(e,n.host))throw new h("invalid-data","a replica cannot join the node it runs on: hold the hostStore handle instead");let t=n.streamId??`store/${n.definition.id}`,r=n.now??(()=>Date.now()),i=n.schedule??((g,m)=>{let b=setInterval(g,m);return()=>{clearInterval(b)}}),s=new he({definition:n.definition,initialState:n.definition.empty()}),o=new Ht({definition:n.definition,core:s,maxEventBytes:n.maxEventBytes,now:r,newQ:()=>(n.newQ??(()=>Ye(8)))(),audience:n.audience,store:n.store??n.definition.id,key:n.key,...n.interest===void 0?{}:{interest:n.interest}}),a=new Map,d=new Map,c=0n,l=!1,u=null,p=null,f=[],y=null;async function O(){if(u!==null)return u;if(p!==null)return p;let g=$e(n.host);return g===null?Promise.reject(new h("invalid-data",`the host id is not a node id: ${n.host}`)):(p=Promise.resolve(n.transport.connectPeer?.(g)).catch(()=>{}).then(()=>n.transport.openStream({reliability:"reliable",peer:g,label:t})).then(m=>{if(p=null,l){try{m.close()}catch{}throw new h("closed","the store closed while its stream was opening")}return u=m,m}).catch(m=>{throw p=null,m}),p)}async function _(g){for(let m of g){if(l)return;let b=Ur.encode(m),x=await O();try{await x.send(b)}catch(C){if(l)return;if(!Ot(C))throw C;if(u===x){u=null,p=null;try{x.close()}catch{}}await(await O()).send(b)}}}function P(g){let m=g instanceof h?g:new h("indeterminate",`the transport could not carry a store frame: ${String(g)}`);for(let b of f.splice(0,f.length))b.reject(m);E(m);for(let[b,x]of[...a])a.delete(b),x.reject(m)}function M(g){_(g).catch(P)}let H=g=>g.map(m=>m.frame);function k(g){if(o.state==="ready"){E(null);for(let b of f.splice(0,f.length))b.resolve();return}if(o.state!=="fenced"&&o.state!=="closed")return;let m=g??new h(o.state==="closed"?"owner-lost":"aborted",`the store handle is ${o.state}`);E(m);for(let b of f.splice(0,f.length))b.reject(m)}function E(g){let m=y;if(m!==null){y=null,m.q!==null&&a.delete(m.q);for(let b of[...m.calls])m.calls.delete(b),g===null?b.resolve():b.reject(g)}}function j(g){return E(new h("aborted","a newer transition superseded this one before it installed")),y={q:g,calls:new Set},g===null?null:a.size>=On?new h("capacity","too many requests are already outstanding"):(a.set(g,{resolve:()=>E(null),reject:m=>E(m),at:r(),transition:!0}),null)}function Y(){return new Promise((g,m)=>{let b={resolve:g,reject:m,deadlineAt:r()+Js},x=y??{q:null,calls:new Set};y=x,x.calls.add(b)})}let ee=n.transport.onEvent(g=>{if(l||g.type!=="stream_data"||typeof g.peerNode!="string"||!Sn(g.peerNode,n.host))return;let m=g.payload;if(m===void 0)return;let b=Vs.decode(m),x=Me(b,{maxBytes:n.maxEventBytes,as:"replica"});if(x.ok&&"q"in x.message&&typeof x.message.q=="string"){let K=a.get(x.message.q);if(K!==void 0&&(x.message.k==="res"||x.message.k==="ok")){a.delete(x.message.q),K.resolve(x.message.k==="res"?x.message.out:void 0);return}K!==void 0&&x.message.k==="no"&&(a.delete(x.message.q),K.reject(new h(x.message.code,`the store refused: ${x.message.code}`)))}let C=null;x.ok&&x.message.k==="no"&&(C=new h(x.message.code,`the store refused: ${x.message.code}`));let W=o.receive(b);M(H(W.out)),k(C)}),ie=i(()=>{if(l)return;let g=o.handle;g!==null&&M([R({k:"alive",q:Ye(8),h:g})])},$r),w=i(()=>{if(l)return;let g=r(),m=y;if(m!==null){for(let b of[...m.calls])g<b.deadlineAt||(m.calls.delete(b),o.cancelWaiter(),b.reject(new h("indeterminate","the transition did not install before its deadline")));m.q!==null&&m.calls.size===0&&E(null)}for(let[b,x]of[...a])x.transition||g-x.at<vn||(a.delete(b),x.reject(new h("indeterminate","the store did not answer before the deadline")))},vn),A=i(()=>{l||(M(H(o.tick())),k(s.getStatus().error??null))},Fs),I;try{I=o.join()}catch(g){throw new h("invalid-data","the join request cannot be encoded",{cause:g})}j(null),M(H([I]));function q(g){return a.size>=On?Promise.reject(new h("capacity","too many requests are already outstanding")):new Promise((m,b)=>{a.set(g,{resolve:x=>{m(x)},reject:b,at:r(),transition:!1})})}let F={getState:()=>s.getState(),subscribe:g=>s.subscribe(g),getStatus:()=>s.getStatus(),subscribeStatus:g=>s.subscribeStatus(g),ready:()=>new Promise((g,m)=>{if(l){m(new h("closed","this store handle is closed"));return}if(o.state==="ready"){g();return}if(o.state==="closed"){m(new h("owner-lost","the store owner closed this handle"));return}f.push({resolve:g,reject:m})}),act:async(g,m)=>{if(l)throw new h("closed","this store handle is closed");if(o.state==="closed")throw new h("owner-lost","the store owner closed this handle");let b=o.handle;if(b===null)throw new h("not-ready","no handle yet: the join has not been answered");c+=1n;let x=(n.newQ??(()=>Ye(8)))(),C;try{C=R({k:"act",q:x,h:b,s:c.toString(),name:g,in:m})}catch(K){throw new h("invalid-data",`the input for '${g}' cannot be encoded`,{cause:K})}let W=q(x);return W.catch(()=>{}),await _([C]),await W},input:(g,m)=>{if(l)return{type:"dropped",reason:"not-ready"};let b=o.handle;if(b===null||o.state!=="ready")return{type:"dropped",reason:"not-ready"};let x=(d.get(g)??0n)+1n;d.set(g,x);let C;try{C=R({k:"in",h:b,s:x.toString(),name:g,in:m})}catch(W){throw new h("invalid-data",`the input for '${g}' cannot be encoded`,{cause:W})}return M([C]),{type:x===1n?"queued":"replaced"}},setAudience:async g=>{if(l)throw new h("closed","this store handle is closed");let m;try{m=o.setAudience(g)}catch(C){throw new h("invalid-data","the audience cannot be encoded",{cause:C})}let b=m[0];if(b!==void 0){let C=j(b.q);if(C!==null)throw C}let x=Y();x.catch(()=>{}),b!==void 0&&await _(H(m)),await x},setInterest:async g=>{if(l)throw new h("closed","this store handle is closed");let m=[...g],b="0".repeat(32),x;try{x=R({k:"int",q:"0".repeat(16),h:b,int:m})}catch(Be){throw new h("invalid-data","the interest set cannot be encoded",{cause:Be})}if(U(x)>n.maxEventBytes)throw new h("capacity","the interest set does not fit one message");o.interest=m;let C=o.handle;if(C===null||o.state!=="ready")return await F.ready(),o.interest===null||o.interest.join("\0")!==m.join("\0")?void 0:F.setInterest(m);let W=(n.newQ??(()=>Ye(8)))(),K=q(W);K.catch(()=>{}),await _([R({k:"int",q:W,h:C,int:m})]),await K},reconnect:async()=>{if(l)throw new h("closed","this store handle is closed");u=null,p=null;let g;try{g=o.reconnect()}catch(m){throw new h("invalid-data","the reconnect request cannot be encoded",{cause:m})}g[0]!==void 0&&j(null),await _(H(g))},close:async()=>{if(l)return;l=!0,ie(),w(),A();let g=o.handle;if(g!==null)try{await(await O()).send(Ur.encode(R({k:"leave",q:Ye(8),h:g})))}catch{}ee(),E(new h("aborted","the store handle closed before this request was answered"));for(let m of a.values())m.reject(new h("aborted","the store handle closed before this request was answered"));a.clear();for(let m of f.splice(0,f.length))m.reject(new h("closed","the store handle closed before a view was installed"));u?.close(),u=null,s.close()}};return F}var Jr="0".repeat(16),kn="0".repeat(32);function Br(n,e,t){let r;try{r=t==="act"?R({k:"act",q:Jr,h:kn,s:"1",name:n,in:e}):R({k:"in",h:kn,s:"1",name:n,in:e})}catch(s){throw new h("invalid-data",`the input for '${n}' cannot be encoded`,{cause:s})}let i=De(r);if(!i.ok||typeof i.value!="object"||i.value===null||Array.isArray(i.value))throw new h("invalid-data",`the input for '${n}' cannot be encoded`);return i.value.in}function Ks(n){let e=De(JSON.stringify(n));return e.ok?e.value:n}function En(n,e){let t=Ct(n);if(t===void 0)throw new h("invalid-data","hostPlayer needs a handle returned by hostStore");let{owner:r,peer:i}=t,s=n.definition,o=new he({definition:s,initialState:s.empty(),phase:"syncing"}),a=[...e.audience],d=e.interest===void 0?null:[...e.interest],c=!1,l=!1,u=new Map;function p(k,E){l=!0,E?.code==="forbidden"&&queueMicrotask(()=>_("refused")),o.applySnapshot(s.empty()),o.setStatus({phase:k,stale:!1,error:E})}function f(){if(c||l)return;if(t.isClosed()){p("closed",null);return}if(!r.localRead(i,a)){p("failed",new h("forbidden","the store refused: forbidden"));return}let k=r.localView(i,a,d);if(k===null){p("failed",new h("capacity","the store refused: capacity"));return}o.applySnapshot(k),o.setStatus({phase:"ready",stale:!1,error:null})}let y=r.subscribe(()=>{f()});t.onClose(()=>{y(),!c&&!l&&p("closed",null)}),f();let O=!1;o.getStatus().phase==="ready"&&(O=!0,r.localPresence(i,!0,a),t.dispatched({out:[],refused:null,deferred:null}));function _(k){!O||t.isClosed()||(O=!1,r.localPresence(i,!1,a,k),t.dispatched({out:[],refused:null,deferred:null}))}function P(){return c?new h("closed","this store handle is closed"):t.isClosed()?new h("owner-lost","the store owner closed this handle"):l?o.getStatus().error??new h("owner-lost","the store owner closed this handle"):null}function M(){let k=[...u];if(u.clear(),P()===null)for(let[E,j]of k)t.dispatched(r.localInput(E,j,i))}function H(k,E,j){return E===void 0?o.subscribe(k):o.subscribe(k,E,j)}return{getState:()=>o.getState(),subscribe:H,getStatus:()=>o.getStatus(),subscribeStatus:k=>o.subscribeStatus(k),ready:()=>{let k=o.getStatus();return k.phase==="ready"?Promise.resolve():Promise.reject(k.error??new h(c?"closed":"owner-lost","this store handle is not ready"))},act:async(k,E)=>{let j=P();if(j!==null)throw j;let Y=Br(k,E,"act");await Promise.resolve();let ee=P();if(ee!==null)throw ee;let{outcome:ie,dispatched:w}=r.localAct(k,Y,i);if(t.dispatched(w),ie.kind==="refusal")throw new h(ie.code,`the store refused: ${ie.code}`);return Ks(ie.out)},input:(k,E)=>{if(P()!==null||o.getStatus().phase!=="ready")return{type:"dropped",reason:"not-ready"};let j=Br(k,E,"in"),Y=u.size===0,ee=u.has(k);return u.set(k,j),Y&&queueMicrotask(M),{type:ee?"replaced":"queued"}},setAudience:async k=>{let E=P();if(E!==null)throw E;try{R({k:"aud",q:Jr,h:kn,aud:[...k]})}catch(Y){throw new h("invalid-data","the audience cannot be encoded",{cause:Y})}await Promise.resolve();let j=P();if(j!==null)throw j;if(!r.localRead(i,k))throw new h("forbidden","the store refused: forbidden");a=[...k],f()},setInterest:async k=>{let E=P();if(E!==null)throw E;let j=[...k];await Promise.resolve(),d=j,f()},reconnect:()=>Promise.resolve(),close:()=>(c||(c=!0,_("left"),u.clear(),y(),o.close()),Promise.resolve())}}var de=class extends Error{constructor(t,r){super(r);this.code=t;this.name="InventoryError"}code},An=64,Rn=Object.freeze({});function zs(){return Rn}function Fr(n){if(typeof n!="string"||n.length===0||n.length>An||n==="__proto__")throw new de("invalid",`an item id is 1-${An} characters, got ${JSON.stringify(n)}`)}function Vr(n){if(!Number.isSafeInteger(n)||n<1)throw new de("invalid",`a count is a whole number of at least 1, got ${String(n)}`)}function Xs(n,e){let t=e?.maxCount;return t===void 0?Number.MAX_SAFE_INTEGER:typeof t=="number"?t:Object.prototype.hasOwnProperty.call(t,n)?t[n]:Number.MAX_SAFE_INTEGER}function Lt(n,e){return n===void 0||!Object.prototype.hasOwnProperty.call(n,e)?0:n[e]??0}function Gs(n,e,t=1){return Lt(n,e)>=t}function Kr(n,e,t,r){Fr(e),Vr(t);let i=Lt(n,e),s=i+t;if(!Number.isSafeInteger(s)||s>Xs(e,r))throw new de("full",`no room for ${String(t)} more ${e}`);if(i===0&&r?.maxKinds!==void 0&&Object.keys(n).length>=r.maxKinds)throw new de("full",`no room for another kind of item (${String(r.maxKinds)} at most)`);return Object.freeze({...n,[e]:s})}function Ys(n,e,t){Fr(e),Vr(t);let r=Lt(n,e);if(r<t)throw new de("insufficient",`has ${String(r)} ${e}, needs ${String(t)}`);let i={...n};return r===t?delete i[e]:i[e]=r-t,Object.freeze(i)}function Qs(n,e){if(typeof n!="object"||n===null||Array.isArray(n))throw new de("invalid","an inventory is an object of item id \u2192 count");let t=Rn;for(let[r,i]of Object.entries(n)){if(typeof i!="number")throw new de("invalid",`the count of ${r} is not a number`);t=Kr(t,r,i,e)}return t}function Zs(n,e){return Object.prototype.hasOwnProperty.call(n,e)?n[e]:Rn}function eo(n,e){return Object.prototype.hasOwnProperty.call(n,e)?{[e]:n[e]}:{}}function zr(n){if(!(n>0)||!Number.isFinite(n))throw new RangeError(`a cell size is a positive number, got ${String(n)}`)}function to(n,e,t){return zr(t),`${String(Math.floor(n/t))}:${String(Math.floor(e/t))}`}function no(n){let e=/^(-?\d+):(-?\d+)$/.exec(n);return e===null?null:[Number(e[1]),Number(e[2])]}function Xr(n,e,t){zr(t.size);let r=t.radius??1,i=Math.floor(n/t.size),s=Math.floor(e/t.size),o=[`${String(i)}:${String(s)}`];for(let a=-r;a<=r;a+=1)for(let d=-r;d<=r;d+=1)(a!==0||d!==0)&&o.push(`${String(i+a)}:${String(s+d)}`);return o}function ro(n,e,t,r){let i=Xr(e,t,r),o=(r.radius??1)+(r.margin??1),a=Math.floor(e/r.size),d=Math.floor(t/r.size),c=new Set(i);for(let l of n){if(c.has(l))continue;let u=no(l);u!==null&&Math.abs(u[0]-a)<=o&&Math.abs(u[1]-d)<=o&&(i.push(l),c.add(l))}return i}function io(n,e){if(n.length!==e.length)return!1;let t=new Set(n);return e.every(r=>t.has(r))}var J=class extends Error{constructor(t,r){super(r);this.code=t;this.name="LobbyError"}code},Gr=64,Yr=256,_n=512,Qr=256,Tt="ABCDEFGHJKMNPQRSTUVWXYZ23456789",Pn=6,ei=2e3,ti=8104,so=/^[a-z0-9][a-z0-9._-]{0,63}$/,ni=1,Qe=new TextEncoder,oo=new TextDecoder;function jn(n){if(!so.test(n))throw new J("invalid",`a game name is 1-64 of a-z 0-9 . _ - (starting with a letter or digit), got ${JSON.stringify(n)}`)}function In(n){let e=n.toUpperCase().replace(/[\s-]/g,"");if(e.length!==Pn||[...e].some(t=>!Tt.includes(t)))throw new J("invalid",`not a lobby code: ${JSON.stringify(n)}`);return e}function ao(){let n=256-256%Tt.length,e="";for(;e.length<Pn;){let t=new Uint8Array(16);crypto.getRandomValues(t);for(let r of t)r<n&&e.length<Pn&&(e+=Tt[r%Tt.length])}return e}function lo(n,e){return`net-lobby:${n}:seek:${e}`}function ri(n){return`net-lobby:${n}`}function Cn(n){return`net-lobby:${n}:rec:`}async function ii(n,e){let t=new Uint8Array(await crypto.subtle.digest("SHA-256",Qe.encode(`net-lobby${n}${e}`))),r="";for(let i of t.subarray(0,16))r+=i.toString(16).padStart(2,"0");return`net-lobby:${n}:code:${r}`}function co(n){let e="";for(let t of n)e+=String.fromCharCode(t);return btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function uo(n){if(!/^[A-Za-z0-9_-]*$/.test(n))return null;try{let e=atob(n.replace(/-/g,"+").replace(/_/g,"/"));return Uint8Array.from(e,t=>t.charCodeAt(0))}catch{return null}}function si(n){if(typeof n!="object"||n===null||Array.isArray(n))throw new J("invalid","lobby info is a flat object of strings, numbers and booleans");let e={};for(let[t,r]of Object.entries(n)){if(typeof r=="number"?!Number.isFinite(r):typeof r!="string"&&typeof r!="boolean")throw new J("invalid",`lobby info.${t} must be a string, a finite number or a boolean`);e[t]=r}if(Qe.encode(JSON.stringify(e)).length>Yr)throw new J("invalid",`lobby info is over ${Yr} bytes of JSON`);return Object.freeze(e)}function oi(n){if(typeof n!="string"||n.trim().length===0||[...n].length>Gr)throw new J("invalid",`a lobby name is 1-${Gr} characters`);return n}function ai(n){if(typeof n!="number"||!Number.isInteger(n)||n<1||n>Qr)throw new J("invalid",`capacity is a whole number from 1 to ${Qr}`);return n}function Zr(n,e){let t=JSON.stringify({v:ni,c:e.code,n:e.name,p:e.players,m:e.capacity,s:e.store,i:e.info}),r=Cn(n)+co(Qe.encode(t));if(Qe.encode(r).length>_n)throw new J("invalid",`the lobby record is over ${_n} bytes: shorten the name or info`);return r}function po(n,e){if(Qe.encode(e).length>_n)return null;let t=uo(e.slice(Cn(n).length));if(t===null)return null;let r;try{r=JSON.parse(oo.decode(t))}catch{return null}if(typeof r!="object"||r===null)return null;let i=r;try{if(i.v!==ni||typeof i.c!="string"||typeof i.s!="string"||i.s.length>200)return null;let s=ai(i.m),o=i.p;return typeof o!="number"||!Number.isInteger(o)||o<0||o>s?null:{code:In(i.c),name:oi(i.n),players:o,capacity:s,store:i.s,info:si(i.i??{})}}catch{return null}}function Dt(n){let e=n.startsWith("0x")?n.slice(2):n;if(/^[0-9a-fA-F]{1,16}$/.test(e))return e.toLowerCase().padStart(16,"0");throw new J("invalid",`not a peer id: ${JSON.stringify(n)}`)}async function Rl(n){let{node:e,game:t}=n;jn(t);let r=oi(n.name),i=ai(n.capacity),s=si(n.info??{}),o=n.visibility??"public",a=ao(),d=`${n.definition.id}@${n.definition.version}`,c=await ii(t,a);Zr(t,{code:a,name:r,players:i,capacity:i,store:d,info:s});let l=e.nodeIdHex();if(l===null)throw new J("invalid","the node has no id yet: connect it before opening a lobby");let u=Dt(l),p=new Set,f=n.authorize??(()=>!0),y=()=>[],O=N=>{let te=N.peer;return p.has(te)||N.type==="read"&&te!==u&&!y().includes(te)&&1+y().filter(yi=>yi!==u).length>=i?!1:f(N)},{audience:_,tags:P,announceEveryMs:M,maxEventBytes:H}=n,{node:k,game:E,name:j,capacity:Y,visibility:ee,info:ie,audience:w,tags:A,announceEveryMs:I,maxEventBytes:q,authorize:F,...g}=n,m=wn({...g,transport:e,maxEventBytes:H??ti,authorize:O}),b=Ct(m);y=()=>b.owner.peers();let x=En(m,{audience:_??[]});function C(){return[u,...b.owner.peers().filter(N=>N!==u)]}let W=new Set,K=!1,Be=null,Mt=!1;function pi(){let N=[...P??[],c];return o==="public"&&N.push(ri(t),Zr(t,{code:a,name:r,players:C().length,capacity:i,store:d,info:s})),N}function Ze(){if(!K){if(Be!==null){Mt=!0;return}Be=e.announce(pi()).catch(()=>{}).finally(()=>{Be=null,Mt&&(Mt=!1,Ze())})}}let Hn=C().join(),fi=b.owner.onMembership(()=>{queueMicrotask(()=>{if(K)return;let N=C();if(N.join()!==Hn){Hn=N.join(),Ze();for(let te of[...W])try{te(N)}catch{}}})});Ze();let hi=setInterval(Ze,M??ei);return{code:a,game:t,visibility:o,host:m,self:x,players:C,subscribePlayers:N=>(W.add(N),()=>{W.delete(N)}),link:N=>{let te=new URL(N??globalThis.location?.href??"about:blank");return te.searchParams.set("lobby",a),te.toString()},kick:N=>{let te=Dt(N);if(te===u)throw new J("invalid","the host cannot kick itself; close the lobby instead");p.add(te),b.dispatched(b.owner.reauthorize())},close:async()=>{K||(K=!0,clearInterval(hi),fi(),W.clear(),await x.close(),await m.close(),await e.announce([...P??[]]).catch(()=>{}))}}}async function _l(n){jn(n.game);let e=Cn(n.game),t=[],r=new Set;for(let i of await n.node.query(ri(n.game))){if(r.has(i.peerIdHex))continue;let s=i.capabilities.find(a=>a.startsWith(e));if(s===void 0)continue;let o=po(n.game,s);o!==null&&(r.add(i.peerIdHex),t.push({...o,host:i.peerIdHex}))}return t}async function Pl(n){jn(n.game);let e;if(n.lobby!==void 0)e=Dt(n.lobby.host);else if(n.code!==void 0){let p=await ii(n.game,In(n.code)),f=Date.now()+(n.timeoutMs??2e4),y=[];for(;y=[...new Set((await n.node.query(p)).map(O=>O.peerIdHex))],!(y.length>0||Date.now()>=f);)await new Promise(O=>setTimeout(O,250));if(y.length===0)throw new J("not-found",`no lobby answered to code ${n.code}`);if(y.length>1)throw new J("ambiguous",`${y.length} nodes claim code ${n.code}; join from the list instead`);e=y[0]}else throw new J("invalid","joinLobby needs a code or a lobby");let t=n.node.nodeIdHex();if(t!==null&&Dt(t)===e)throw new h("invalid-data","this node hosts that lobby: use lobby.self to play in it");let r=n.node,i=[...n.tags??[]],s=[...i,lo(n.game,e)],o=!1,a=()=>{o||r.announce(s).catch(()=>{})};a();let d=setInterval(a,ei),c=()=>{o||(o=!0,clearInterval(d),r.announce(i).catch(()=>{}))};if(r.connectPeer!==void 0){let p=Date.now()+(n.timeoutMs??2e4);for(;;)try{await r.connectPeer(e);break}catch(f){if(Date.now()>=p)throw c(),new J("not-found",`could not reach the lobby's host ${e}: ${String(f?.message??f)}`);await new Promise(y=>setTimeout(y,500))}}let l;try{l=xn({definition:n.definition,transport:r,host:e,audience:n.audience??[],key:n.key??"player",maxEventBytes:n.maxEventBytes??ti,...n.interest===void 0?{}:{interest:n.interest}})}catch(p){throw c(),p}let u=l.close.bind(l);return l.close=async()=>{c(),await u()},l}function jl(n){try{let e=new URL(n??globalThis.location?.href??"").searchParams.get("lobby");return e===null?null:In(e)}catch{return null}}var di="net-mesh:identity";function li(n){let e=new Uint8Array(n);return globalThis.crypto.getRandomValues(e),Array.from(e,t=>t.toString(16).padStart(2,"0")).join("")}var ci=/^[0-9a-f]{64}$/;function fo(n){if(n===null)return null;try{let e=JSON.parse(n);if(typeof e.entitySecretHex=="string"&&typeof e.noiseSecretHex=="string"&&ci.test(e.entitySecretHex)&&ci.test(e.noiseSecretHex))return{entitySecretHex:e.entitySecretHex,noiseSecretHex:e.noiseSecretHex}}catch{}return null}function ho(n=di,e){let t=e;try{t??=globalThis.localStorage}catch{t=void 0}let r=null;try{r=fo(t?.getItem(n)??null)}catch{t=void 0}if(r!==null)return r;let i={entitySecretHex:li(32),noiseSecretHex:li(32)};try{t?.setItem(n,JSON.stringify(i))}catch{}return i}var qe=class extends Error{constructor(t,r,i=null){super(r);this.kind=t;this.status=i}kind;status;name="CredentialRequestError"},ui={unknown_game:"unknown-game",rate_limited:"rate-limited",malformed_request:"malformed-request"};async function yo(n){let e=n.fetch??globalThis.fetch;if(typeof e!="function")throw new qe("unreachable","requestCredential needs fetch");let t=`${n.anchorUrl.replace(/\/+$/,"")}/credential`,r;try{r=await e(t,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({game:n.game}),...n.signal===void 0?{}:{signal:n.signal}})}catch(o){throw n.signal?.aborted?o:new qe("unreachable",`could not reach ${t}: ${String(o)}`)}let i=null;try{i=await r.json()}catch{}if(!r.ok){let o=i?.refusal,a=i?.message,d=typeof o=="string"&&o in ui?ui[o]:r.status===404?"unreachable":"unexpected",c=d==="unreachable"?`${t} issues no credentials (is the anchor started with --game?)`:typeof a=="string"?a:`the anchor answered ${r.status}`;throw new qe(d,c,r.status)}let s=i;if(typeof s?.credentialB64!="string"||typeof s.bootstrapUrl!="string"||typeof s.game!="string")throw new qe("unexpected","the anchor answered without a credential",r.status);return{credentialB64:s.credentialB64,bootstrapUrl:s.bootstrapUrl,game:s.game}}export{$r as ALIVE_INTERVAL_MS,we as AsyncQueue,mt as BrowserNode,tt as ControlPlaneError,qe as CredentialRequestError,di as DEFAULT_IDENTITY_KEY,Ae as EventHub,xt as HIDDEN,Nr as HOST_SWEEP_MS,nt as IceServerConflictError,ge as IdentityError,de as InventoryError,ei as LOBBY_ANNOUNCE_MS,Tt as LOBBY_CODE_ALPHABET,Pn as LOBBY_CODE_LENGTH,z as LeafError,je as LeafStream,J as LobbyError,Tr as MAX_EVENT_ROUNDS,dr as MAX_INTEREST_KEYS,ur as MAX_INTEREST_KEY_BYTES,An as MAX_ITEM_ID_CHARS,Qr as MAX_LOBBY_CAPACITY,Yr as MAX_LOBBY_INFO_BYTES,Gr as MAX_LOBBY_NAME_CHARS,_n as MAX_LOBBY_RECORD_TAG_BYTES,On as MAX_OUTSTANDING,vt as MeshSession,rt as NotLeaderError,at as ORG_SINK_CLOSED_REFUSAL,ue as OrgAdmissionDeniedError,D as OrgCancelledError,Pe as OrgDuplex,Re as OrgHandleRegistry,Je as OrgIndeterminateError,ve as OrgInternalError,Z as OrgLeaderLostError,We as OrgMalformedError,Fe as OrgRefusedError,Ke as OrgRequests,xe as OrgRevokedError,X as OrgServe,Ee as OrgSessionLostError,Ve as OrgSink,be as OrgStream,Q as OrgStreamError,ke as OrgTimeoutError,_e as OrgUpload,vn as REQUEST_DEADLINE_MS,it as RpcError,pe as RtcError,Oe as SessionError,he as StoreCore,h as StoreError,$n as U64_EVENT_KEYS,Ne as UnknownLeafError,et as WireError,Kr as addItems,Qt as asSessionModule,Gi as assertHidden,bt as buildConnectRequest,to as cellKey,Xr as cellsAround,Ft as classifyRtcError,Gn as classifyRtcFailure,st as coarseAdmissionReason,Ni as connect,Lt as countItems,Rl as createLobby,Yi as defineStore,Yn as diagnosticStunUrl,zs as emptyInventory,Bn as fromBase64,S as fromWasmError,Gs as hasItems,Vi as hiddenOr,En as hostPlayer,wn as hostStore,Zs as inventoryOf,kt as isHidden,Yt as isLifecycleEvent,xi as isUdpBlocked,Pl as joinLobby,xn as joinStore,_l as listLobbies,Xe as loadLeafWasm,jl as lobbyCodeFromUrl,Rt as mergeShallow,In as normalizeLobbyCode,eo as onlyOwn,Fi as openSession,mi as orgRetireError,lt as orgRetireReason,qt as orgTerminalError,Ce as parseAttemptStatus,St as parseCounters,wt as parseDescriptors,me as parseEvent,Qs as parseInventory,ct as parseJsonPreservingU64,Mn as parseLeafError,ze as parseOrgCaller,Tn as parseOrgError,nr as parseRetryReport,Nn as parseRpcFailure,qn as parseRtcFailure,tr as parseRtcStats,Gt as parseSessionEvent,er as peerIdHex,Kt as probeBootstrapReachable,Vt as probeStunBinding,ar as projectVisible,le as reconcile,Xt as refineIceFailure,Qn as reflexiveAddress,ho as rememberedIdentity,Ys as removeItems,yo as requestCredential,io as sameCells,ro as stickyCells,Ut as toBase64,ne as toWasmOrgCallOptions,re as toWasmOrgServeOptions,ot as udpBlockedEvidence};
|
|
1
|
+
var we=class{constructor(e=()=>{}){this.detach=e}detach;buffered=[];waiting=null;ended=!1;push(e){if(this.ended)return;let t=this.waiting;if(t){this.waiting=null,t({value:e,done:!1});return}this.buffered.push(e)}end(){if(this.ended)return;this.ended=!0;let e=this.waiting;e&&(this.waiting=null,e({value:void 0,done:!0}))}next(){let e=this.buffered.shift();if(e!==void 0)return Promise.resolve({value:e,done:!1});if(this.ended)return Promise.resolve({value:void 0,done:!0});let{promise:t,resolve:r}=Promise.withResolvers();return this.waiting=r,t}return(){return this.detach(),this.end(),Promise.resolve({value:void 0,done:!0})}[Symbol.asyncIterator](){return this}};function ot(n,e,t,r=[t]){return!n||!e||t.length===0||r.length===0||r[0]!==t||r.some(i=>i.length===0)?null:{bootstrapOk:!0,stunProbeFailed:!0,probed:t,probedAll:[...r]}}var z=class extends Error{constructor(e){super(e),this.name="LeafError"}},et=class extends z{constructor(t){super(`wire: ${t}`);this.detail=t;this.name="WireError"}detail;kind="wire"},Oe=class extends z{constructor(t){super(`session: ${t}`);this.detail=t;this.name="SessionError"}detail;kind="session"},tt=class extends z{constructor(t){super(`control plane: ${t}`);this.detail=t;this.name="ControlPlaneError"}detail;kind="control-plane"},ge=class extends z{constructor(t){super(`identity: ${t}`);this.detail=t;this.name="IdentityError"}detail;kind="identity"},nt=class extends z{constructor(t,r){super(`ice configuration: the iceServers entry ${t} names this connection's peer RTC endpoint ${r}; a peer cannot be its own STUN server. Omit iceServers to use the STUN endpoint the anchor announces (the stun_addr field of GET /rtc/anchor), or name a STUN server that is not this peer`);this.entry=t;this.peerRtcAddr=r;this.name="IceServerConflictError"}entry;peerRtcAddr;kind="ice-server-conflict"},rt=class extends z{constructor(t,r=null){super(r===null?`not the leader: this tab holds generation ${t}`:`not the leader: this tab holds generation ${t}, the leader holds ${r}`);this.presented=t;this.current=r;this.name="NotLeaderError"}presented;current;kind="not-leader"},oe=class extends z{constructor(t){super(`rtc: ${ki(t)}`);this.failure=t;this.name="RtcError",this.kind=Oi[t.type]}failure;kind},it=class extends z{constructor(t){super(`rpc: ${Ei(t)}`);this.failure=t;this.name="RpcError",this.kind=xi[t.type]}failure;kind},Ne=class extends z{constructor(t,r){super(t);this.cause=r;this.name="UnknownLeafError"}cause;kind="unknown"},Q=class extends z{},pe=class extends Q{constructor(t,r){super(r??`org:admission_denied:${wi[t]}`);this.coarse=t;this.name="OrgAdmissionDeniedError"}coarse;kind="org-admission-denied"},xe=class extends pe{kind="org-revoked";constructor(e="org:admission_denied:denied"){super("denied",e),this.name="OrgRevokedError"}},ke=class extends Q{kind="org-timeout";constructor(e="org:rpc:timeout"){super(e),this.name="OrgTimeoutError"}},D=class extends Q{kind="org-cancelled";constructor(e="org:rpc:cancelled"){super(e),this.name="OrgCancelledError"}},Z=class extends Q{constructor(t,r="org:rpc:leader_lost"){super(r);this.generation=t;this.name="OrgLeaderLostError"}generation;kind="org-leader-lost"},Ee=class extends Q{kind="org-session-lost";constructor(e="org:rpc:session_lost"){super(e),this.name="OrgSessionLostError"}},Je=class extends Q{constructor(t,r="org:rpc:indeterminate"){super(r);this.deadlineMs=t;this.name="OrgIndeterminateError"}deadlineMs;kind="org-indeterminate"},Fe=class extends Q{constructor(t,r="org:rpc:refused"){super(r);this.status=t;this.name="OrgRefusedError"}status;kind="org-refused"},ve=class extends Q{kind="org-internal";constructor(e="org:rpc:internal"){super(e),this.name="OrgInternalError"}},We=class extends Q{kind="org-malformed";constructor(e="org:rpc:malformed"){super(e),this.name="OrgMalformedError"}},at="org: the response sink is closed: the call was retired";var Mn="org:",wi={denied:"denied","not-supported":"not_supported",unavailable:"unavailable"};function st(n){let e=(n??"").trim();return e==="unavailable"?"unavailable":e==="not_supported"||e==="not-supported"?"not-supported":e==="\0"||e==="0"?"denied":e===""||e==="1"?"not-supported":e===""||e==="2"?"unavailable":"denied"}function vi(n){switch(n){case"timeout":return new ke;case"revoked":return new xe;case"session-lost":return new Ee;case"leader-lost":return new Z("");case"cancelled":case"node-closed":case"replaced":return new D;case"resource-exhausted":return new pe("unavailable")}}function Nt(n){let e=n.message;switch(n.kind){case"admission-denied":return new pe(st(n.coarse),e);case"revoked":return e===void 0?new xe:new xe(e);case"timeout":return e===void 0?new ke:new ke(e);case"cancelled":return e===void 0?new D:new D(e);case"leader-lost":return new Z(n.generation??"",e);case"session-lost":return e===void 0?new Ee:new Ee(e);case"indeterminate":return new Je(n.deadlineMs??0,e);case"refused":return new Fe(n.status??0,e);case"malformed":return e===void 0?new We:new We(e);case"internal":return e===void 0?new ve:new ve(e);default:return new ve(`org:rpc:internal: unrecognized terminal kind ${JSON.stringify(n.kind)}`+(e===void 0?"":`: ${e}`))}}function lt(n){switch(n){case"timeout":case"cancelled":case"revoked":case"session-lost":case"leader-lost":case"node-closed":case"replaced":case"resource-exhausted":return n;default:return"replaced"}}function qn(n){if(/^org: .+ is closed: the call was retired$/.test(n))return new D(n);if(/^org: .+ is closed: the call's byte budget refused the item and retired the call$/.test(n))return new pe("unavailable",n);if(n.startsWith(Mn)){let t=n.slice(Mn.length),r=t.indexOf(":");if(r<=0)return null;let i=t.slice(0,r),s=t.slice(r+1),o=s.indexOf(":"),a=o===-1?s:s.slice(0,o);if(a.length===0)return null;if(i==="admission_denied")return new pe(st(a),n);if(i!=="rpc")return null;switch(a){case"revoked":return new xe(n);case"timeout":return new ke(n);case"cancelled":return new D(n);case"leader_lost":case"leader-lost":return new Z("",n);case"session_lost":case"session-lost":return new Ee(n);case"indeterminate":return new Je(0,n);case"refused":case"server_error":case"capability_denied":return new Fe(0,n);case"malformed":case"codec_encode":case"codec_decode":return new We(n);case"internal":case"no_route":case"transport":return new ve(n);default:return null}}let e=/^rpc: refused \(9\): ([\s\S]*)$/.exec(n);return e?new pe(st(e[1]),n):null}var Oi={iceTimeout:"ice-timeout",udpBlocked:"udp-blocked",channelClosed:"channel-closed",unsupported:"rtc-unsupported"},xi={refused:"rpc-refused",timeout:"rpc-timeout",sessionLost:"session-lost",leaderLost:"leader-lost",indeterminate:"rpc-indeterminate",malformed:"rpc-malformed"},Nn="ICE did not connect inside the deadline (this does not establish that UDP is blocked)";function ki(n){switch(n.type){case"iceTimeout":return Nn;case"udpBlocked":return`no UDP response from the anchor's advertised endpoints: its HTTPS bootstrap succeeded but STUN bindings to ${n.evidence.probedAll.join(", ")} went unanswered`;case"channelClosed":return`the DataChannel closed: ${n.detail}`;case"unsupported":return`this browser refused the attempt: ${n.detail}`}}function Ei(n){switch(n.type){case"refused":return`refused (${n.status}): ${n.message}`;case"timeout":return"the call's deadline elapsed";case"sessionLost":return"the session carrying the call went away";case"leaderLost":return`the leader holding generation ${n.generation} was replaced`;case"indeterminate":return`the local deadline of ${n.deadlineMs}ms elapsed before the tab running the node answered; the remote operation may still have executed (it was not retried)`;case"malformed":return`the reply did not decode: ${n.detail}`}}function S(n){if(n instanceof z)return n;let e=Ai(n);return Wn(e)??new Ne(e,n)}function Ai(n){if(typeof n=="string")return n;if(n instanceof Error)return n.message;if(n!==null&&typeof n=="object"&&"message"in n){let e=n.message;if(typeof e=="string")return e}return String(n)}function Wn(n){let e=qn(n);if(e!==null)return e;let t=se(n,"rtc: ");if(t!==null){let l=Un(t);return l===null?null:new oe(l)}let r=se(n,"rpc: ");if(r!==null){let l=$n(r);return l===null?null:new it(l)}let i=se(n,"wire: ");if(i!==null)return new et(i);let s=se(n,"session: ");if(s!==null)return new Oe(s);let o=se(n,"control plane: ");if(o!==null)return new tt(o);let a=se(n,"identity: ");if(a!==null)return new ge(a);let d=se(n,"ice configuration: ");if(d!==null){let l=/^the iceServers entry (.+?) names this connection's peer RTC endpoint (.+?); a peer cannot be its own STUN server\./.exec(d);if(l)return new nt(l[1]??"",l[2]??"")}let c=/^not the leader: this tab holds generation (\d+)(?:, the leader holds (\d+))?$/.exec(n);if(c){let l=Number(c[1]),u=c[2]===void 0?null:Number(c[2]);return new rt(l,u)}return null}function Un(n){if(n===Nn)return{type:"iceTimeout"};let e=/^no UDP response from the anchor's advertised endpoints: its HTTPS bootstrap succeeded but STUN bindings to (.+) went unanswered$/.exec(n);if(e){let i=(e[1]??"").split(", "),s=i[0]??"",o=ot(!0,!0,s,i);return o===null?null:{type:"udpBlocked",evidence:o}}let t=se(n,"the DataChannel closed: ");if(t!==null)return{type:"channelClosed",detail:t};let r=se(n,"this browser refused the attempt: ");return r!==null?{type:"unsupported",detail:r}:null}function $n(n){let e=/^refused \((\d+)\): ([\s\S]*)$/.exec(n);if(e)return{type:"refused",status:Number(e[1]),message:e[2]??""};if(n==="the call's deadline elapsed")return{type:"timeout"};if(n==="the session carrying the call went away")return{type:"sessionLost"};let t=/^the leader holding generation (\d+) was replaced$/.exec(n);if(t)return{type:"leaderLost",generation:Number(t[1])};let r=/^the local deadline of (\d+)ms elapsed before the tab running the node answered; the remote operation may still have executed \(it was not retried\)$/.exec(n);if(r)return{type:"indeterminate",deadlineMs:Number(r[1])};let i=se(n,"the reply did not decode: ");return i!==null?{type:"malformed",detail:i}:null}function Ri(n){return n instanceof oe&&n.failure.type==="udpBlocked"}function se(n,e){return n.startsWith(e)?n.slice(e.length):null}var Jn=["node_id","peer_node","channel_hash","origin_hash","stream_id","dialog","not_after","call_id","seq","generation","incarnation","version","from","to"];function me(n){let e;try{e=ct(n)}catch{return{type:"unknown",tag:null,raw:n}}if(e===null||typeof e!="object")return{type:"unknown",tag:null,raw:e};let t=e,r=typeof t.type=="string"?t.type:null;switch(r){case"connected":return{type:"connected",nodeIdHex:$(t,"node_id_hex"),peerNode:$(t,"peer_node"),rtcAddr:$t(t,"rtc_addr"),rtcAddrs:_i(t)};case"disconnected":return{type:"disconnected",reason:$(t,"reason")};case"channel_message":return{type:"channel_message",channelHash:$(t,"channel_hash"),originHash:$(t,"origin_hash"),payload:Ut(t,"payload")};case"stream_data":return{type:"stream_data",peerNode:$(t,"peer_node"),incarnation:$(t,"incarnation"),streamId:$(t,"stream_id"),seq:Wt(t,"seq"),payload:Ut(t,"payload")};case"announcement":return{type:"announcement",nodeId:$(t,"node_id"),capabilities:Pi(t,"capabilities"),rtcAddr:$t(t,"rtc_addr"),verified:t.verified===!0};case"signal":return{type:"signal",from:$(t,"from"),to:$(t,"to"),dialog:$(t,"dialog"),kind:$(t,"kind"),payload:Ut(t,"payload"),notAfter:$(t,"not_after")};case"rpc_response":return{type:"rpc_response",callId:$(t,"call_id"),status:Wt(t,"status")};case"dropped":return{type:"dropped",reason:$(t,"reason"),subprotocol:Wt(t,"subprotocol")};case"rtc_failure":return{type:"rtc_failure",error:S($(t,"error"))};default:return{type:"unknown",tag:r,raw:t}}}var Ae=class{typed=new Map;any=new Set;queues=new Set;on(e,t){let r=this.typed.get(e)??new Set;this.typed.set(e,r);let i=t;return r.add(i),()=>{r.delete(i)}}onAny(e){return this.any.add(e),()=>{this.any.delete(e)}}events(){let e=new we(()=>this.queues.delete(e));return this.queues.add(e),e}deliver(e,t){this.dispatch(t?t(e):me(e))}dispatch(e){for(let t of this.typed.get(e.type)??[])Bn(t,e);for(let t of this.any)Bn(t,e);for(let t of this.queues)t.push(e)}close(){this.typed.clear(),this.any.clear();for(let e of[...this.queues])e.end();this.queues.clear()}};function Bn(n,e){try{n(e)}catch(t){console.error("[@net-mesh/browser] event listener threw",t)}}function ct(n){let e=Jn.join("|"),t=n.replace(new RegExp(`("(?:${e})"\\s*:\\s*)(\\d+)`,"g"),'$1"$2"');return JSON.parse(t)}function $(n,e){let t=n[e];return typeof t=="string"?t:typeof t=="number"||typeof t=="boolean"?String(t):""}function _i(n){let e=n.rtc_addrs;if(Array.isArray(e))return e.filter(r=>typeof r=="string"&&r.length>0);let t=$t(n,"rtc_addr");return t===null?[]:[t]}function $t(n,e){let t=n[e];return typeof t=="string"&&t.length>0?t:null}function Wt(n,e){let t=n[e];if(typeof t=="number")return t;if(typeof t=="string"){let r=Number(t);return Number.isFinite(r)?r:0}return 0}function Pi(n,e){let t=n[e];return Array.isArray(t)?t.filter(r=>typeof r=="string"):[]}function Ut(n,e){let t=n[e];return t instanceof Uint8Array?t:typeof t!="string"?new Uint8Array(0):Fn(t)}function Fn(n){let e=atob(n),t=new Uint8Array(e.length);for(let r=0;r<e.length;r+=1)t[r]=e.charCodeAt(r);return t}function Bt(n){let e="";for(let t of n)e+=String.fromCharCode(t);return btoa(e)}var Re=class{live=new Set;add(e){this.live.add(e)}delete(e){this.live.delete(e)}retireAll(e){let t=[...this.live];this.live.clear();let r=[];for(let i of t)try{i.retire(e)}catch(s){r.push(s)}return r}},be=class{constructor(e,t,r){this.inner=e;this.onCancel=t;this.onDone=r}inner;onCancel;onDone;terminal=null;failure=null;handleDropped=!1;waiters=[];next(){if(this.failure!==null)return Promise.reject(this.failure);if(this.terminal!==null)return Promise.resolve(this.terminal);let{promise:e,resolve:t,reject:r}=Promise.withResolvers(),i={resolve:t,reject:r};return this.waiters.push(i),this.inner.next().then(s=>{Ue(this.waiters,i);let o=ji(s);o.done&&this.complete(o),t(o)},s=>{Ue(this.waiters,i);let o=S(s);this.fail(o),r(o)}),e}cancel(){this.retire(new D)}retire(e){this.terminal!==null||this.failure!==null||(this.dropHandle(),this.complete({done:!0,error:e}))}[Symbol.asyncIterator](){let e=!1;return{next:async()=>{if(e)return{done:!0,value:void 0};let t=await this.next();if(t.error!==void 0)throw t.error;return t.value===void 0?(e=!0,{done:!0,value:void 0}):(t.done&&(e=!0),{done:!1,value:t.value})},return:async()=>(e=!0,this.cancel(),{done:!0,value:void 0})}}complete(e){if(this.terminal!==null)return;this.terminal=e,this.onDone?.();let t=[...this.waiters];this.waiters.length=0;for(let r of t)r.resolve(e)}fail(e){if(this.terminal!==null||this.failure!==null)return;this.failure=e,this.onDone?.();let t=[...this.waiters];this.waiters.length=0;for(let r of t)r.reject(e)}dropHandle(){if(!this.handleDropped){this.handleDropped=!0;try{this.onCancel()}catch{}}}},_e=class{constructor(e,t){this.inner=e;this.onDone=t}inner;onDone;failure=null;handleDropped=!1;waiters=[];async send(e){if(this.failure!==null)throw this.failure;try{await this.inner.send(e)}catch(t){throw S(t)}}finish(){if(this.failure!==null)return Promise.reject(this.failure);let{promise:e,resolve:t,reject:r}=Promise.withResolvers(),i={reject:r};return this.waiters.push(i),this.inner.finish().then(s=>{Ue(this.waiters,i),this.onDone?.(),t(s)},s=>{Ue(this.waiters,i),this.onDone?.(),r(S(s))}),e}cancel(){this.retire(new D)}retire(e){if(this.failure!==null)return;if(this.failure=e,!this.handleDropped){this.handleDropped=!0;try{this.inner.cancel()}catch{}}this.onDone?.();let t=[...this.waiters];this.waiters.length=0;for(let r of t)r.reject(e)}},Pe=class{constructor(e,t){this.inner=e;this.onDone=t;this.stream=new be(e.stream(),()=>this.dropHandle(),()=>this.onDone?.()),this.sink={send:async r=>{if(this.failure!==null)throw this.failure;try{await this.inner.send(r)}catch(i){throw S(i)}},finishSending:async()=>{if(this.failure!==null)throw this.failure;try{await this.inner.finish_sending()}catch(r){throw S(r)}},cancel:()=>{this.retire(new D)}}}inner;onDone;handleDropped=!1;failure=null;sink;stream;retire(e){this.failure??=e,this.dropHandle(),this.stream.retire(e),this.onDone?.()}dropHandle(){if(!this.handleDropped){this.handleDropped=!0;try{this.inner.cancel()}catch{}}}},Ve=class{constructor(e){this.inner=e;this.retired=e.retired().then(t=>(this.verdict??=lt(t),this.verdict),()=>(this.verdict??="replaced",this.verdict))}inner;retired;verdict=null;async send(e){if(this.verdict!==null)throw new D(at);try{await this.inner.send(e)}catch(t){throw S(t)}}async close(){if(this.verdict!==null)throw new D(at);try{await this.inner.close()}catch(e){throw S(e)}}},Ke=class{constructor(e){this.inner=e;this.retired=e.retired().then(t=>(this.settle(lt(t)),this.verdict),()=>(this.settle("replaced"),this.verdict))}inner;retired;verdict=null;waiters=[];next(){if(this.verdict!==null)return Promise.resolve({done:!0});let{promise:e,resolve:t}=Promise.withResolvers();return this.waiters.push(t),this.inner.next().then(r=>{Ue(this.waiters,t),t(Ii(r))},()=>{Ue(this.waiters,t),t({done:!0})}),e}[Symbol.asyncIterator](){return{next:async()=>{let e=await this.next();return e.done||e.value===void 0?{done:!0,value:void 0}:{done:!1,value:e.value}},return:async()=>({done:!0,value:void 0})}}settle(e){if(this.verdict!==null)return;this.verdict=e;let t=[...this.waiters];this.waiters.length=0;for(let r of t)r({done:!0})}},X=class{constructor(e,t){this.inner=e;this.onDone=t}inner;onDone;closed=!1;get service(){return this.inner.service()}close(){this.closed||(this.closed=!0,this.onDone?.(),this.inner.close())}retire(e){this.close()}};function ne(n){return{credentials:{membership:n.credentials.membership,dispatcher:n.credentials.dispatcher,...n.credentials.capabilityGrant===void 0?{}:{capabilityGrant:n.credentials.capabilityGrant},actingOrg:n.credentials.actingOrg,providerOwnerOrg:n.credentials.providerOwnerOrg,provider:n.credentials.provider,...n.credentials.proofTtlSecs===void 0?{}:{proofTtlSecs:n.credentials.proofTtlSecs}},...n.deadlineMs===void 0?{}:{deadlineMs:n.deadlineMs},...n.streamWindowInitial===void 0?{}:{streamWindowInitial:n.streamWindowInitial},...n.requestWindowInitial===void 0?{}:{requestWindowInitial:n.requestWindowInitial}}}function re(n){return{ownerOrg:n.ownerOrg}}function ze(n){let e=JSON.parse(n);if(e===null||typeof e!="object")throw new Ne("the caller attribution is not an OrgCaller object");let t=e;return{entity:String(t.entity??""),actingOrg:String(t.actingOrg??""),providerOrg:String(t.providerOrg??""),provider:String(t.provider??""),capability:String(t.capability??""),isSameOrg:t.isSameOrg===!0}}function dt(n){return async(e,t)=>await n(ze(e),t)}function ut(n){return async(e,t,r)=>{await n(ze(e),t,new Ve(r))}}function pt(n){return async(e,t)=>await n(ze(e),new Ke(t))}function ft(n){return async(e,t,r)=>{await n(ze(e),new Ke(t),new Ve(r))}}function Ue(n,e){let t=n.indexOf(e);t>=0&&n.splice(t,1)}function ji(n){return n.done?n.error!==void 0?{done:!0,error:Nt(n.error)}:n.value===void 0?{done:!0}:{done:!0,value:n.value}:{done:!1,value:n.value}}function Ii(n){return n.done?{done:!0}:{done:!1,value:n.value}}var Jt=class extends Oe{constructor(e){super(e),this.name="StreamIdentityError"}},je=class{constructor(e,t,r="required"){this.inner=e;this.onClosed=t;if(this.wireId=Vn(()=>e.stream_id_hex()),this.peerId=Vn(()=>e.peer_node_hex()),r==="required"&&this.peerId===null)throw new Jt("the stream did not report a readable peer, so its frames cannot be attributed");e.on_message(i=>this.receive(i))}inner;onClosed;queues=new Set;listeners=new Set;pending=[];closed=!1;wireId;peerId;get peerNode(){return this.inner.peer_node_hex()}get reliability(){return this.inner.is_reliable()?"reliable":"fireAndForget"}get streamId(){return this.inner.stream_id_hex()}async send(e){if(this.closed)throw new Oe("the stream is closed");try{await this.inner.send(e)}catch(t){throw S(t)}}onMessage(e){this.listeners.add(e);let t=this.pending.splice(0,this.pending.length);for(let r of t)e(r);return()=>{this.listeners.delete(e)}}[Symbol.asyncIterator](){let e=new we(()=>this.queues.delete(e));this.queues.add(e);let t=this.pending.splice(0,this.pending.length);for(let r of t)e.push(r);return this.closed&&e.end(),e}close(){if(!this.closed){this.closed=!0;for(let e of[...this.queues])e.end();this.queues.clear(),this.listeners.clear(),this.onClosed?.(),this.inner.close()}}receive(e){let t=this.decode(e);if(!(t===null||this.closed)){if(this.queues.size===0&&this.listeners.size===0){this.pending.push(t);return}for(let r of this.listeners)try{r(t)}catch(i){console.error("[@net-mesh/browser] stream listener threw",i)}for(let r of this.queues)r.push(t)}}decode(e){if(e instanceof Uint8Array)return e;if(typeof e!="string")return console.error("[@net-mesh/browser] stream callback received",typeof e,"not the leaf event JSON"),null;let t=me(e);return t.type!=="stream_data"||!/^\d+$/.test(t.streamId)||this.wireId!==null&&BigInt(t.streamId)!==this.wireId||this.peerId!==null&&(!/^\d+$/.test(t.peerNode)||BigInt(t.peerNode)!==this.peerId)?null:t.payload}};function Vn(n){let e;try{e=n()}catch{return null}return e===void 0||!/^[0-9a-fA-F]{1,16}$/.test(e)?null:BigInt(`0x${e}`)}var Kn="no verified announcement for",Ci="no live attempt with",Hi="no verified offer from",Li="is not the live attempt",Ti=50,Di=5e3;async function ht(n,e,t){let r;try{r=await e.offer(n)}catch(s){let o=S(s);if(o.message.includes(Kn))return{type:"noAnnouncement",peer:n,detail:o.message};throw o}let i=await zn(n,r,s=>s.state==="open",e,t);return i.type!=="direct"?i:Ft(n,r,e)}async function yt(n,e,t){let r=null,i=Date.now()+Di;for(;;)try{r=await e.acceptOffer(n);break}catch(s){let o=S(s);if(o.message.includes(Kn))return{type:"noAnnouncement",peer:n,detail:o.message};if(!o.message.includes(Hi)||Date.now()>=i)throw o;await Gn()}return zn(n,r,s=>s.direct,e,t)}async function Ft(n,e,t){let r;try{r=await t.handshake(n,e)}catch(i){let s=Xn(i,n,e);return s!==null?s:{type:"handshakeFailed",peer:n,dialog:e,detail:S(i).message}}return r!==e?{type:"superseded",peer:n,dialog:e,liveDialog:r}:{type:"direct",peer:n,dialog:e}}async function zn(n,e,t,r,i){for(;;){let s;try{s=i(await r.candidate(n,e))}catch(o){let a=Xn(o,n,e);if(a!==null)return a;throw S(o)}if(s.dialog!==e)return{type:"superseded",peer:n,dialog:e,liveDialog:s.dialog};if(t(s))return{type:"direct",peer:n,dialog:e};if(s.state==="iceTimeout")return{type:"iceTimeout",peer:n,dialog:e};if(s.state==="udpBlocked")return{type:"udpBlocked",peer:n,dialog:e};if(s.state==="failed")return{type:"handshakeFailed",peer:n,dialog:e,detail:s.candidateError??"the attempt reached its terminal transition without installing a session"};await Gn()}}function Xn(n,e,t){let{message:r}=S(n);return r.includes(Li)?{type:"superseded",peer:e,dialog:t,liveDialog:Mi(r)}:r.includes(Ci)?{type:"superseded",peer:e,dialog:t,liveDialog:null}:null}function Mi(n){return/\(dialog ([0-9a-f]{16}) is\)/.exec(n)?.[1]??null}async function Gn(){let n=Promise.withResolvers();setTimeout(n.resolve,Ti),await n.promise}function Kt(n){let e=n.trim().split(/\s+/);return e.some((t,r)=>t==="typ"&&e[r+1]==="srflx")}function zt(n){return"candidate"in n?Kt(n.candidate):"error"in n?n.error<Ui:!1}function Qn(n){if(n.some(zt))return"answered";let e=n.some(r=>"candidate"in r);return n.some(r=>"ice"in r&&r.ice==="failed")&&!e?"notRun":"unanswered"}function qi(n){return Qn(n)==="answered"}function Zn(n){let{bootstrapOk:e,stunProbe:t,probed:r}=n;return r===null?{type:"iceTimeout"}:gt({bootstrapOk:e,probes:[{probed:r,stunProbe:t}]})}function gt(n){let{bootstrapOk:e,probes:t}=n;if(t.length===0||t.some(s=>s.stunProbe.type!=="unanswered"))return{type:"iceTimeout"};let r=t.map(s=>s.probed),i=ot(e,!0,r[0]??"",r);return i===null?{type:"iceTimeout"}:{type:"udpBlocked",evidence:i}}function Ni(n){return new oe(Zn(n))}var Wi=2500,Ui=700,Vt=3478;async function er(n,e={}){let t=tr(n);if(t===null)return{type:"notRun",reason:`not an address: ${n}`};let r=e.peerConnectionFactory??Bi();if(r===null)return{type:"unsupported",detail:"RTCPeerConnection is not available in this context"};let i=e.timeoutMs??Wi,{promise:s,resolve:o}=Promise.withResolvers(),a;try{a=r({iceServers:[{urls:t}],iceCandidatePoolSize:0})}catch(f){return{type:"unsupported",detail:String(f)}}let d=!1,c=f=>{d||(d=!0,o(f))},l=null,u=setTimeout(()=>c({type:"unanswered",detail:l??"no answer inside the probe deadline"}),i),p=()=>{c({type:"unanswered",detail:l??"gathering completed with no reflexive candidate"})},y=!1;a.oniceconnectionstatechange=()=>{a.iceConnectionState==="failed"&&!y&&c({type:"notRun",reason:"the engine failed the probe connection before gathering any candidate"})},a.onicecandidate=f=>{let w=f.candidate;if(w===null){p();return}y=!0;let R=nr(w);R!==null&&c({type:"reflexive",address:R})},a.onicecandidateerror=f=>{let w=f.errorCode,R=`${w}: ${f.errorText} (${f.url})`;if(zt({error:w})){c({type:"stunError",code:w,detail:R});return}l=R},a.onicegatheringstatechange=()=>{a.iceGatheringState==="complete"&&p()};try{a.createDataChannel("net-udp-probe"),await a.setLocalDescription(await a.createOffer())}catch(f){c({type:"unsupported",detail:String(f)})}try{return await s}finally{clearTimeout(u),a.onicecandidate=null,a.onicecandidateerror=null,a.oniceconnectionstatechange=null,a.onicegatheringstatechange=null,a.close()}}async function Xt(n,e={}){return Promise.all(n.map(async t=>({probed:t,stunProbe:await er(t,e)})))}var $i=3e3;async function Gt(n,e={}){let t=e.fetchImpl??globalThis.fetch;if(typeof t!="function")return!1;try{return await t(n,{method:"GET",mode:"no-cors",cache:"no-store",redirect:"follow",signal:AbortSignal.timeout(e.timeoutMs??$i)}),!0}catch{return!1}}function tr(n){let e=n.trim();if(e.length===0)return null;if(e.startsWith("stun:")||e.startsWith("stuns:"))return e;let t=/^\[([0-9a-fA-F:.]+)\](?::(\d+))?$/.exec(e);if(t)return`stun:[${t[1]??""}]:${t[2]??Vt}`;if((e.match(/:/g)?.length??0)>1)return`stun:[${e}]:${Vt}`;let r=/^([A-Za-z0-9._-]+)(?::(\d+))?$/.exec(e);return r===null?null:`stun:${r[1]??""}:${r[2]??Vt}`}function nr(n){return n.type==="srflx"?n.address??Yn(n.candidate):n.type!==null?null:Kt(n.candidate)?Yn(n.candidate):null}function Yn(n){let e=n.split(" "),t=e[4]??"",r=e[5]??"";return r.length>0?`${t}:${r}`:t}function Bi(){return typeof RTCPeerConnection>"u"?null:n=>new RTCPeerConnection(n)}var Yt=new Map;async function Xe(n={}){if(n.wasm)return n.wasm;let e=n.wasmModule??new URL("./net_leaf.js",import.meta.url).href,t=`${e}|${String(n.wasmUrl??"")}`,r=Yt.get(t);if(r)return r;let i=Ji(e,n.wasmUrl);Yt.set(t,i);try{return await i}catch(s){throw Yt.delete(t),s}}async function Ji(n,e){let t=await import(n),r=Fi(t,n);return r.default&&await r.default(e===void 0?void 0:{module_or_path:e}),r}function Fi(n,e){if(n===null||typeof n!="object"||!("LeafNode"in n))throw new Error(`${e} is not a net-mesh-leaf module: no LeafNode export`);let t=n.LeafNode;if(typeof t!="function"||!("connect"in t))throw new Error(`${e} exports a LeafNode without a static connect()`);if(typeof t.connect!="function")throw new Error(`${e} exports a LeafNode whose connect is not callable`);return n}function Ie(n,e){if(typeof n=="string")return n;let t=typeof n=="object"&&n!==null?Object.prototype.toString.call(n):String(n);throw new TypeError(`${t} is not a ${e} id: a ${e} id crosses this boundary as 16 hex digits as a STRING \u2014 the spelling this boundary hands out; a ${typeof n} is refused rather than coerced, because a number cannot carry a u64 id`)}function ir(n){if(!/^\d+$/.test(n))throw new TypeError(`a decimal node id is digits only, got ${JSON.stringify(n)}`);let e=BigInt(n);if(e>0xffffffffffffffffn)throw new TypeError(`${n} does not fit in a u64 node id`);return e.toString(16).padStart(16,"0")}var bt=class{constructor(e,t,r,i){this.inner=e;this.bootstrapUrl=t;this.failureTyping=r;this.nodeId=e.node_id_hex(),this.anchorRtcAddr=i,e.on_event(s=>this.ingest(s))}inner;bootstrapUrl;failureTyping;hub=new Ae;nodeId;closed=!1;streams=new Set;orgHandles=new Re;anchorRtcAddr;anchorRtcAddrs=[];bootstrapObserved=!1;nodeIdHex(){return this.nodeId}anchorIdHex(){return this.inner.anchor_id_hex()}originHashHex(){return this.inner.origin_hash_hex()}async enroll(){try{await this.inner.enroll()}catch(e){throw S(e)}}isEnrolled(){return this.inner.is_enrolled()}async call(e,t,r){try{return await this.inner.call(e,t,r)}catch(i){throw S(i)}}async subscribe(e){try{await this.inner.subscribe(e)}catch(t){throw S(t)}}async publish(e,t){try{await this.inner.publish(e,t)}catch(r){throw S(r)}}openStream(e){let t;try{t=this.inner.open_stream(e)}catch(i){throw S(i)}let r=new je(t,()=>this.streams.delete(r));return this.streams.add(r),r}async callOrg(e,t,r){try{return await this.inner.call_org(e,t,ne(r))}catch(i){throw S(i)}}async callOrgStreaming(e,t,r){try{let i=await this.inner.call_org_streaming(e,t,ne(r)),s=new be(i,()=>i.cancel(),()=>this.orgHandles.delete(s));return this.orgHandles.add(s),s}catch(i){throw S(i)}}async callOrgClientStream(e,t){try{let r=await this.inner.call_org_client_stream(e,ne(t)),i=new _e(r,()=>this.orgHandles.delete(i));return this.orgHandles.add(i),i}catch(r){throw S(r)}}async callOrgDuplex(e,t){try{let r=await this.inner.call_org_duplex(e,ne(t)),i=new Pe(r,()=>this.orgHandles.delete(i));return this.orgHandles.add(i),i}catch(r){throw S(r)}}serveOrg(e,t,r,i){try{let s=new X(this.inner.serve_org(e,t,dt(r),re(i)),()=>this.orgHandles.delete(s));return this.orgHandles.add(s),s}catch(s){throw S(s)}}serveOrgStreaming(e,t,r,i){try{let s=new X(this.inner.serve_org_streaming(e,t,ut(r),re(i)),()=>this.orgHandles.delete(s));return this.orgHandles.add(s),s}catch(s){throw S(s)}}serveOrgClientStream(e,t,r,i){try{let s=new X(this.inner.serve_org_client_stream(e,t,pt(r),re(i)),()=>this.orgHandles.delete(s));return this.orgHandles.add(s),s}catch(s){throw S(s)}}serveOrgDuplex(e,t,r,i){try{let s=new X(this.inner.serve_org_duplex(e,t,ft(r),re(i)),()=>this.orgHandles.delete(s));return this.orgHandles.add(s),s}catch(s){throw S(s)}}async signal(e,t,r,i){try{await this.inner.signal(Ie(e,"peer"),Ie(t,"dialog"),r,i)}catch(s){throw S(s)}}async connectPeer(e){let t;try{t=this.inner.peer_direct_dialog(Ie(e,"peer"))}catch(r){throw S(r)}return t!=null?{type:"direct",peer:e,dialog:t}:ht(e,this.peerPrimitives(),Ce)}peerPrimitives(){return{offer:e=>this.inner.peer_offer(e),acceptOffer:e=>this.inner.peer_accept_offer(e),candidate:(e,t)=>this.inner.peer_candidate_in(e,t),handshake:(e,t)=>this.inner.peer_handshake_in(e,t)}}async handshakePeer(e,t){return Ft(e,t,this.peerPrimitives())}async acceptPeer(e){return yt(e,this.peerPrimitives(),Ce)}async peerAttempt(e){try{return Ce(await this.inner.peer_candidate(e))}catch(t){throw S(t)}}counters(){return wt(this.inner.counters_json())}rtcStats(){return sr(this.inner.rtc_stats_json())}enableNetworkRetry(){try{this.inner.arm_network_retry()}catch(e){throw S(e)}}retryReport(){return or(this.inner.retry_report())}async announce(e){try{await this.inner.announce([...e])}catch(t){throw S(t)}}async query(e){let t;try{t=await this.inner.query(e)}catch(r){throw S(r)}return vt(t)}on(e,t){return this.hub.on(e,t)}onEvent(e){return this.hub.onAny(e)}events(){return this.hub.events()}async refineIceFailure(e){return Qt(e,{bootstrapUrl:this.bootstrapUrl,bootstrapObserved:this.bootstrapObserved,anchorRtcAddr:this.anchorRtcAddr,anchorRtcAddrs:this.anchorRtcAddrs,failureTyping:this.failureTyping})}close(){if(this.closed)return;this.closed=!0;let e=[];for(let r of this.orgHandles.retireAll(new D("org:rpc:cancelled: the node is closed")))e.push(S(r));let t=[...this.streams];this.streams.clear();for(let r of t)try{r.close()}catch(i){e.push(S(i))}try{this.hub.close()}catch(r){e.push(S(r))}try{this.inner.close()}catch(r){e.push(S(r))}if(e.length>0)throw new AggregateError(e,`close: ${e.length} of this node's teardown steps failed`)}ingest(e){let t=me(e);t.type==="connected"&&(this.bootstrapObserved=!0,t.rtcAddr!==null&&(this.anchorRtcAddr=t.rtcAddr),t.rtcAddrs.length>0&&(this.anchorRtcAddrs=t.rtcAddrs)),this.hub.dispatch(t)}};async function Vi(n){let e=St(n),t=n.failureTyping??{},r=await Xe(n);try{let i=await r.LeafNode.connect(e);return new bt(i,n.bootstrapUrl??null,t,n.anchorRtcAddr??null)}catch(i){throw await Qt(S(i),{bootstrapUrl:n.bootstrapUrl??null,bootstrapObserved:!1,anchorRtcAddr:n.anchorRtcAddr??null,failureTyping:t})}}function St(n){return{credentialB64:Xi(n),origin:n.origin??Gi(),...n.bootstrapUrl===void 0?{}:{bootstrapUrl:n.bootstrapUrl},...n.iceServers?{iceServers:n.iceServers}:{},...Ki(n)}}function wt(n){let e=JSON.parse(n);if(e===null||typeof e!="object")return{};let t={};for(let[r,i]of Object.entries(e))t[r]=typeof i=="string"?i:String(i);return t}function Ce(n){let e=JSON.parse(n);if(e===null||typeof e!="object")throw new TypeError(`peer_candidate did not answer an object: ${n}`);let t=e,r=t.state;if(r!=="gathering"&&r!=="open"&&r!=="iceTimeout"&&r!=="udpBlocked"&&r!=="failed")throw new TypeError(`peer_candidate answered an unknown state: ${String(r)}`);let i=t.candidateError;return{dialog:String(t.dialog??""),state:r,sent:Number(t.sent??0),applied:Number(t.applied??0),answered:t.answered===!0,direct:t.direct===!0,remainingMs:String(t.remainingMs??"0"),candidateError:typeof i=="string"?i:null}}function sr(n){let e=JSON.parse(n);if(e===null||typeof e!="object")throw new TypeError(`rtc_stats_json did not answer an object: ${n}`);let t={},r={};for(let[i,s]of Object.entries(e)){if(i==="not_applicable"){if(s===null||typeof s!="object")continue;for(let[o,a]of Object.entries(s))r[o]=String(a);continue}t[i]=typeof s=="string"?s:String(s)}return{counters:t,notApplicable:r}}function or(n){let e=JSON.parse(n);if(e===null||typeof e!="object")throw new TypeError(`retry_report did not answer an object: ${n}`);let t=e;return{armed:t.armed===!0,online:String(t.online??"0"),iceFailed:String(t.iceFailed??"0"),triggers:String(t.triggers??"0"),started:String(t.started??"0"),coalesced:String(t.coalesced??"0"),notEligible:String(t.notEligible??"0"),openEpisodes:Number(t.openEpisodes??0),owned:Number(t.owned??0),last:typeof t.last=="string"?t.last:null}}async function Qt(n,e){if(!(n instanceof oe)||n.failure.type!=="iceTimeout"||e.failureTyping.probeOnIceTimeout===!1)return n;let t=e.anchorRtcAddrs!==void 0&&e.anchorRtcAddrs.length>0?e.anchorRtcAddrs:e.anchorRtcAddr!==null?[e.anchorRtcAddr]:[];if(t.length===0)return n;let r=await Xt(t,e.failureTyping.stun);if(r.some(s=>s.stunProbe.type!=="unanswered"))return n;let i=e.bootstrapObserved||e.bootstrapUrl!==null&&await Gt(e.bootstrapUrl,e.failureTyping.bootstrap);return new oe(gt({bootstrapOk:i,probes:r}))}function vt(n){let e=ct(n);if(!Array.isArray(e))return[];let t=[];for(let r of e){if(r===null||typeof r!="object")continue;let i={...r},s=i.capabilities,o=zi(i.node_id);t.push({nodeId:o,peerIdHex:ir(o),entityId:mt(i.entity_id),capabilities:Array.isArray(s)?s.filter(a=>typeof a=="string"):[],rtcAddr:mt(i.rtc_addr),noisePubkey:mt(i.noise_pubkey),version:mt(i.version)})}return t}var rr=/^[0-9a-fA-F]{64}$/;function Ki(n){let{entitySecretHex:e,noiseSecretHex:t}=n;if(e===void 0){if(t!==void 0)throw new ge("noiseSecretHex was supplied without entitySecretHex: the leaf would generate the entity half, so the identity would not be the one you meant to inject");return{}}if(!rr.test(e))throw new ge(`entitySecretHex must be 32 bytes of hex (64 hex digits), got ${e.length} characters`);if(t===void 0)return{entitySecretHex:e};if(!rr.test(t))throw new ge(`noiseSecretHex must be 32 bytes of hex (64 hex digits), got ${t.length} characters`);return{entitySecretHex:e,noiseSecretHex:t}}function zi(n){return typeof n=="string"?n:typeof n=="number"?String(n):""}function mt(n){return typeof n=="string"?n.length>0?n:null:typeof n=="number"?String(n):null}function Xi(n){if(n.credentialB64!==void 0)return n.credentialB64;let e=n.credential;if(typeof e=="string")return e;if(e instanceof Uint8Array)return Bt(e);throw new Error("connect() needs a credential: pass credentialB64 or credential")}function Gi(){let n=globalThis.location?.origin;if(typeof n=="string"&&n.length>0)return n;throw new Error("connect() needs an origin: there is no location.origin in this context")}function Zt(n){let e=me(n);return e.type!=="unknown"?e:Yi(e)??e}function en(n){switch(n.type){case"leader_changed":case"subscription_restored":case"leader_lost":case"generation_fenced":case"not_leader":case"promotion_failed":return!0;default:return!1}}function Yi(n){let e=n.raw;if(e===null||typeof e!="object")return null;let t={...e};switch(n.tag){case"leader_changed":return{type:"leader_changed",generation:He(t.generation)};case"subscription_restored":return{type:"subscription_restored",channel:typeof t.channel=="string"?t.channel:""};case"leader_lost":{let r=Number(t.failed);return{type:"leader_lost",generation:He(t.generation),failed:Number.isFinite(r)?r:0}}case"generation_fenced":return{type:"generation_fenced",presented:He(t.presented),current:He(t.current)};case"not_leader":return{type:"not_leader",presented:He(t.presented),current:He(t.current)};case"promotion_failed":return{type:"promotion_failed",generation:He(t.generation),detail:typeof t.detail=="string"?t.detail:""};default:return null}}function He(n){return typeof n=="string"?n:typeof n=="number"&&Number.isFinite(n)?String(n):"0"}function tn(n){let e=n.MeshSession;if(!(e!==null&&(typeof e=="object"||typeof e=="function")&&"open"in e&&typeof e.open=="function"))throw new Error("this net-mesh-leaf bundle has no MeshSession: leader election and the follower proxy need a wasm build from Stage 5 slice 3 or later");return n}var Ot=class{constructor(e){this.inner=e;this.streamGeneration=e.generation(),e.on_event(t=>this.hub.deliver(t,Zt)),this.hub.onAny(t=>{if(t.type==="leader_lost"||t.type==="not_leader"){this.orgHandles.retireAll(new Z(this.streamGeneration)),this.endStreams();return}let r=this.inner.generation();if(r===this.streamGeneration)return;let i=this.streamGeneration;this.streamGeneration=r,this.orgHandles.retireAll(new Z(i)),this.endStreams()})}inner;hub=new Ae;streams=new Set;streamGeneration;orgHandles=new Re;closed=!1;role(){return this.inner.role()==="leader"?"leader":"follower"}generation(){return this.inner.generation()}nodeIdHex(){return this.inner.node_id_hex()??null}fingerprint(){return this.inner.fingerprint()}scope(){return this.inner.scope()}interruptionMs(){return this.inner.interruption_ms()??null}async call(e,t,r){return await this.guard(()=>this.inner.call(e,t,r))}async subscribe(e){await this.guard(()=>this.inner.subscribe(e))}async unsubscribe(e){await this.guard(()=>this.inner.unsubscribe(e))}async publish(e,t){await this.guard(()=>this.inner.publish(e,t))}async announce(e){await this.guard(()=>this.inner.announce([...e]))}async query(e){return vt(await this.guard(()=>this.inner.query(e)))}async counters(){return wt(await this.guard(()=>this.inner.counters_json()))}async enroll(){await this.guard(()=>this.inner.enroll())}async isEnrolled(){return await this.guard(()=>this.inner.is_enrolled())}async signal(e,t,r,i){await this.guard(()=>this.inner.signal(Ie(e,"peer"),Ie(t,"dialog"),r,i))}async connectPeer(e){let t;try{t=await this.inner.peer_direct_dialog(e)??void 0}catch{t=void 0}return t!==void 0?{type:"direct",peer:e,dialog:t}:ht(e,this.peerPrimitives(),Ce)}async acceptPeer(e){return yt(e,this.peerPrimitives(),Ce)}peerPrimitives(){return{offer:e=>this.guard(()=>this.inner.peer_offer(e)),acceptOffer:e=>this.guard(()=>this.inner.peer_accept_offer(e)),candidate:(e,t)=>this.guard(()=>this.inner.peer_candidate(e,t)),handshake:(e,t)=>this.guard(()=>this.inner.peer_handshake(e,t))}}async openStream(e){let t=this.inner.generation(),r=new je(await this.guard(()=>this.inner.open_stream(e)));return this.closed||this.inner.generation()!==t?(r.close(),r):(this.streams.add(r),r)}async callOrg(e,t,r){return await this.guard(()=>this.inner.call_org(e,t,ne(r)))}async callOrgStreaming(e,t,r){let i=this.inner.generation(),s;try{let o=await this.inner.call_org_streaming(e,t,ne(r));s=new be(o,()=>o.cancel(),()=>this.orgHandles.delete(s))}catch(o){throw S(o)}return this.closed||this.inner.generation()!==i?(s.retire(this.closed?new D("org:rpc:cancelled: the session is closed"):new Z(i)),s):(this.orgHandles.add(s),s)}async callOrgClientStream(e,t){let r=this.inner.generation(),i;try{let s=await this.inner.call_org_client_stream(e,ne(t));i=new _e(s,()=>this.orgHandles.delete(i))}catch(s){throw S(s)}return this.closed||this.inner.generation()!==r?(i.retire(this.closed?new D("org:rpc:cancelled: the session is closed"):new Z(r)),i):(this.orgHandles.add(i),i)}async callOrgDuplex(e,t){let r=this.inner.generation(),i;try{let s=await this.inner.call_org_duplex(e,ne(t));i=new Pe(s,()=>this.orgHandles.delete(i))}catch(s){throw S(s)}return this.closed||this.inner.generation()!==r?(i.retire(this.closed?new D("org:rpc:cancelled: the session is closed"):new Z(r)),i):(this.orgHandles.add(i),i)}serveOrg(e,t,r,i){try{let s=new X(this.inner.serve_org(e,t,dt(r),re(i)),()=>this.orgHandles.delete(s));return this.orgHandles.add(s),s}catch(s){throw S(s)}}serveOrgStreaming(e,t,r,i){try{let s=new X(this.inner.serve_org_streaming(e,t,ut(r),re(i)),()=>this.orgHandles.delete(s));return this.orgHandles.add(s),s}catch(s){throw S(s)}}serveOrgClientStream(e,t,r,i){try{let s=new X(this.inner.serve_org_client_stream(e,t,pt(r),re(i)),()=>this.orgHandles.delete(s));return this.orgHandles.add(s),s}catch(s){throw S(s)}}serveOrgDuplex(e,t,r,i){try{let s=new X(this.inner.serve_org_duplex(e,t,ft(r),re(i)),()=>this.orgHandles.delete(s));return this.orgHandles.add(s),s}catch(s){throw S(s)}}on(e,t){return this.hub.on(e,t)}onEvent(e){return this.hub.onAny(e)}onLifecycle(e){return this.hub.onAny(t=>{en(t)&&e(t)})}events(){return this.hub.events()}close(){this.closed||(this.closed=!0,this.orgHandles.retireAll(new D("org:rpc:cancelled: the session is closed")),this.endStreams(),this.hub.close(),this.inner.close())}endStreams(){let e=[...this.streams];this.streams.clear();for(let t of e)t.close()}async guard(e){try{return await e()}catch(t){throw S(t)}}};async function Qi(n){let e=tn(await Xe(n)),t={...St(n),...n.capabilities?{capabilities:[...n.capabilities]}:{},...n.subscriptions?{subscriptions:[...n.subscriptions]}:{},...n.dbName===void 0?{}:{dbName:n.dbName},...n.lockScope===void 0?{}:{lockScope:n.lockScope}};try{return new Ot(await e.MeshSession.open(t))}catch(r){throw S(r)}}var ar=["invalid-data","version-mismatch","forbidden","not-ready","capacity","timeout","aborted","indeterminate","owner-lost","closed","action-rejected","result-expired"],h=class extends Error{code;constructor(e,t,r){super(t,r),this.name="StoreError",this.code=e}};function xt(n){return(n instanceof Error?n.message:String(n)).includes("stale stream handle")}var kt=Object.freeze({$hidden:!0});function Et(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)&&Object.keys(n).length===1&&n.$hidden===!0}function Zi(n){return e=>Et(e)?kt:n(e)}var lr=Object.freeze({"card-game":Object.freeze({"players.*.hand":"owner",deck:"nobody","deck.length":"everyone"})}),es=/^(\*|[^.*]+)$/;function Le(n){let e;if(n==="open")e={};else if(typeof n=="string"){let i=lr[n];if(i===void 0)throw new h("invalid-data",`unknown visibility preset '${n}'`);e={...i}}else if(typeof n=="object"&&n!==null){let{preset:i,...s}=n;if(e={},i!==void 0){let o=lr[i];if(o===void 0)throw new h("invalid-data",`unknown visibility preset '${String(i)}'`);Object.assign(e,o)}Object.assign(e,s)}else throw new h("invalid-data","visibility is a preset name or an object of path \u2192 rule");let t=[],r=!1;for(let[i,s]of Object.entries(e)){let o=i.split(".");if(i.length===0||!o.every(c=>es.test(c)))throw new h("invalid-data",`visibility path '${i}' is not dot-separated keys and '*'`);let a=o.length>1&&o[o.length-1]==="length";if(!(s==="everyone"||s==="nobody"||s==="owner"||Array.isArray(s)&&s.length>0&&s.every(c=>typeof c=="string"&&c.length>0)))throw new h("invalid-data",`visibility rule for '${i}' must be 'everyone', 'nobody', 'owner' or a non-empty list of audiences`);if(s==="owner"){if(!o.includes("*"))throw new h("invalid-data",`'owner' needs a '*' in the path to name the owner: '${i}'`);r=!0}t.push(Object.freeze({path:i,segments:Object.freeze(o),rule:s,counts:a}))}return t.sort((i,s)=>i.segments.length-s.segments.length),Object.freeze({rules:Object.freeze(t),perPlayer:r})}function cr(n,e,t){return n==="everyone"?!0:n==="nobody"||t===null?!1:n==="owner"?e[0]===t.peer:n.some(r=>t.audience.includes(r))}function ts(n,e){let t=[],r=(i,s,o,a)=>{if(s===e.length){t.push({keys:[...o],captures:[...a],value:i});return}if(typeof i!="object"||i===null)return;let d=e[s];if(d==="*"){let c=Array.isArray(i)?i.map((l,u)=>[u,l]):Object.entries(i);for(let[l,u]of c)r(u,s+1,[...o,l],[...a,String(l)]);return}Array.isArray(i)||!Object.prototype.hasOwnProperty.call(i,d)||r(i[d],s+1,[...o,d],a)};return r(n,0,[],[]),t}var nn=Symbol("drop");function ns(n,e,t){let r=n;for(let i of e){let s=r.children.get(i);s===void 0&&(s={children:new Map},r.children.set(i,s)),r=s}r.value=t}function rn(n,e){if("value"in e)return e.value;if(e.children.size===0||typeof n!="object"||n===null)return n;if(Array.isArray(n)){let r=[];return n.forEach((i,s)=>{let o=e.children.get(s),a=o===void 0?i:rn(i,o);a!==nn&&r.push(a)}),r}let t={};for(let[r,i]of Object.entries(n)){let s=e.children.get(r),o=s===void 0?i:rn(i,s);o!==nn&&(t[r]=o)}return t}var dr="\0";function Te(n,e,t){if(n.rules.length===0)return e;let r={children:new Map},i=new Set,s=!1;for(let o of n.rules){if(o.counts)continue;let a=n.rules.find(c=>c.counts&&c.segments.length===o.segments.length+1&&c.segments.slice(0,-1).every((l,u)=>l===o.segments[u])),d=o.segments[o.segments.length-1]==="*";for(let c of ts(e,o.segments)){let l="",u=!1;for(let y=0;y<c.keys.length-1&&!u;y+=1)l=y===0?String(c.keys[0]):`${l}${dr}${String(c.keys[y])}`,u=i.has(l);if(u||cr(o.rule,c.captures,t))continue;let p=d?nn:kt;a!==void 0&&Array.isArray(c.value)&&cr(a.rule,c.captures,t)&&(p=c.value.map(()=>kt)),ns(r,c.keys,p),i.add(c.keys.map(String).join(dr)),s=!0}}return s?rn(e,r):e}function ur(n,e,t){return n.visibility===void 0?e:Te(Le(n.visibility),e,t)}function rs(n,e,t,r){let i=ur(n,e,t);for(let s of r){let o=i;for(let d of s.split(".")){if(typeof o!="object"||o===null||!Object.prototype.hasOwnProperty.call(o,d)){o=void 0;break}o=o[d]}if(o!==void 0&&!Et(o)&&!(Array.isArray(o)&&o.every(d=>Et(d))))throw new Error(`'${s}' is visible to ${t===null?"nobody in particular":t.peer}`)}}function is(n){if(n.id.length===0)throw new h("invalid-data","a store definition needs a non-empty id");if(!Number.isSafeInteger(n.version)||n.version<1)throw new h("invalid-data",`store '${n.id}' needs a positive integer version, got ${String(n.version)}`);let e;try{e=n.empty()}catch(t){throw new h("invalid-data",`store '${n.id}' could not build its empty state: ${String(t)}`,{cause:t})}try{n.state(e)}catch(t){throw new h("invalid-data",`store '${n.id}': empty() is not a valid state, so a replica could not clear a projection with it: ${String(t)}`,{cause:t})}if(n.visibility!==void 0)try{Le(n.visibility)}catch(t){throw new h("invalid-data",`store '${n.id}': ${t instanceof Error?t.message:String(t)}`,{cause:t})}if(n.interest!==void 0){for(let[t,r]of Object.entries(n.interest))if(t.length===0||t.includes(".")||typeof r!="function")throw new h("invalid-data",`store '${n.id}': interest maps a top-level collection name to a key function, got '${t}'`)}if(n.entities!==void 0)for(let[t,r]of Object.entries(n.entities)){if(t.length===0||t.includes(".")||typeof r!="function")throw new h("invalid-data",`store '${n.id}': entities maps a top-level collection name to a per-entity parser, got '${t}'`);let i=e[t];if(i!==void 0&&!sn(i))throw new h("invalid-data",`store '${n.id}': entities names '${t}', but empty().${t} is not a record of entities`)}return Object.freeze({...n})}function sn(n){if(typeof n!="object"||n===null||Array.isArray(n))return!1;let e=Object.getPrototypeOf(n);return e===Object.prototype||e===null}var T=class extends Error{constructor(t,r){super(t);this.reason=t;this.at=r}reason;at};function De(n){let e=new on(n);try{return{ok:!0,value:e.document()}}catch(t){if(t instanceof T)return{ok:!1,reason:t.reason,at:t.at};throw t}}var on=class{constructor(e){this.src=e}src;i=0;document(){if(this.skipWhitespace(),this.i>=this.src.length)throw new T("empty",this.i);let e=this.value(0);if(this.skipWhitespace(),this.i!==this.src.length)throw new T("trailing-content",this.i);return e}value(e){let t=this.src.charCodeAt(this.i);switch(t){case 123:return this.object(e+1);case 91:return this.array(e+1);case 34:return this.string();default:break}if(t===45||t>=48&&t<=57)return this.number();if(this.src.startsWith("true",this.i))return this.i+=4,!0;if(this.src.startsWith("false",this.i))return this.i+=5,!1;if(this.src.startsWith("null",this.i))return this.i+=4,null;throw new T(Number.isNaN(t)?"unexpected-end":"literal",this.i)}object(e){if(e>16)throw new T("depth-exceeded",this.i);this.i+=1;let t=Object.create(null);if(this.skipWhitespace(),this.peek()===125)return this.i+=1,t;for(;;){if(this.skipWhitespace(),this.peek()!==34)throw new T("unexpected-token",this.i);let r=this.i,i=this.string();if(Object.prototype.hasOwnProperty.call(t,i))throw new T("duplicate-key",r);if(this.skipWhitespace(),this.peek()!==58)throw new T("unexpected-token",this.i);this.i+=1,this.skipWhitespace(),t[i]=this.value(e),this.skipWhitespace();let s=this.peek();if(s===44){this.i+=1;continue}if(s===125)return this.i+=1,t;throw new T(s===-1?"unexpected-end":"unexpected-token",this.i)}}array(e){if(e>16)throw new T("depth-exceeded",this.i);this.i+=1;let t=[];if(this.skipWhitespace(),this.peek()===93)return this.i+=1,t;for(;;){this.skipWhitespace(),t.push(this.value(e)),this.skipWhitespace();let r=this.peek();if(r===44){this.i+=1;continue}if(r===93)return this.i+=1,t;throw new T(r===-1?"unexpected-end":"unexpected-token",this.i)}}string(){this.i+=1;let e="";for(;;){if(this.i>=this.src.length)throw new T("unexpected-end",this.i);let t=this.src.charCodeAt(this.i);if(t===34)return this.i+=1,e;if(t===92){e+=this.escape();continue}if(t<32)throw new T("string-control-char",this.i);e+=this.src[this.i],this.i+=1}}escape(){this.i+=1;let e=this.src[this.i];switch(this.i+=1,e){case'"':return'"';case"\\":return"\\";case"/":return"/";case"b":return"\b";case"f":return"\f";case"n":return`
|
|
2
|
+
`;case"r":return"\r";case"t":return" ";case"u":{let t=this.src.slice(this.i,this.i+4);if(!/^[0-9a-fA-F]{4}$/.test(t))throw new T("string-escape",this.i);return this.i+=4,String.fromCharCode(Number.parseInt(t,16))}default:throw new T("string-escape",this.i-1)}}number(){let e=this.i;if(this.peek()===45&&(this.i+=1),this.peek()===48){if(this.i+=1,this.isDigit(this.peek()))throw new T("number-grammar",e)}else if(this.isDigit(this.peek()))for(;this.isDigit(this.peek());)this.i+=1;else throw new T("number-grammar",e);if(this.peek()===46){if(this.i+=1,!this.isDigit(this.peek()))throw new T("number-grammar",e);for(;this.isDigit(this.peek());)this.i+=1}let t=this.src[this.i];if(t==="e"||t==="E"){this.i+=1;let i=this.peek();if((i===43||i===45)&&(this.i+=1),!this.isDigit(this.peek()))throw new T("number-grammar",e);for(;this.isDigit(this.peek());)this.i+=1}let r=Number(this.src.slice(e,this.i));if(!Number.isFinite(r))throw new T("number-not-finite",e);return r}isDigit(e){return e>=48&&e<=57}peek(){return this.i>=this.src.length?-1:this.src.charCodeAt(this.i)}skipWhitespace(){for(;;){let e=this.peek();if(e===32||e===9||e===10||e===13){this.i+=1;continue}return}}};var fr=1,G=32,fe=16,cn=16,ss=32,os=128,hr=256,yr=64,Se=1024*1024,ae=255,dn=256,un=8,Ge=64,as=256,ls=18446744073709551615n,cs=20,ds=["join","resume","resync","act","in","aud","alive","leave","int"],us=["man","snap","delta","res","ok","no"],ps={join:{required:["v","k","q","def","ver","store","key","aud"],optional:["int"]},resume:{required:["v","k","q","h","aud"],optional:["int"]},int:{required:["v","k","q","h","int"],optional:[]},resync:{required:["v","k","q","h","g","have"],optional:[]},aud:{required:["v","k","q","h","aud"],optional:[]},alive:{required:["v","k","q","h"],optional:[]},leave:{required:["v","k","q","h"],optional:[]},act:{required:["v","k","q","h","s","name","in"],optional:[]},in:{required:["v","k","h","name","s","in"],optional:[]},man:{required:["v","k","h","inc","g","r","n","bytes"],optional:["q"]},snap:{required:["v","k","h","g","r","i","n","d"],optional:[]},delta:{required:["v","k","h","g","base","r","ops"],optional:[]},res:{required:["v","k","q","h","s","out"],optional:[]},ok:{required:["v","k","q","h"],optional:[]},no:{required:["v","k","code"],optional:["q","h","s","detail"]}},fs={join:["v","k","q","def","ver","store","key","aud","int"],resume:["v","k","q","h","aud","int"],int:["v","k","q","h","int"],resync:["v","k","q","h","g","have"],aud:["v","k","q","h","aud"],alive:["v","k","q","h"],leave:["v","k","q","h"],act:["v","k","q","h","s","name","in"],in:["v","k","h","name","s","in"],man:["v","k","q","h","inc","g","r","n","bytes"],snap:["v","k","h","g","r","i","n","d"],delta:["v","k","h","g","base","r","ops"],res:["v","k","q","h","s","out"],ok:["v","k","q","h"],no:["v","k","q","h","code","s","detail"]},an=new Set(ds),pr=new Set(us),hs=new Set(ar),ys=/^[A-Za-z0-9+/]+={0,2}$/;function B(n,e,t="invalid-data"){return{ok:!1,code:t,stage:n,reason:e}}var At=class{constructor(e){this.refusal=e}refusal};function L(n,e,t="invalid-data"){return new At(B(n,e,t))}function O(n){return n instanceof At}function U(n){let e=0;for(let t=0;t<n.length;t+=1){let r=n.codePointAt(t);r>65535&&(t+=1),e+=r<=127?1:r<=2047?2:r<=65535?3:4}return e}function Me(n,e){if(U(n)>e.maxBytes)return B("bytes","frame-too-large","capacity");let r=De(n);if(!r.ok)return B("json",r.reason);let i=r.value;if(typeof i!="object"||i===null||Array.isArray(i))return B("json","not-an-object");let s=i;if(s.v!==fr)return B("envelope","unknown-version");let o=s.k;if(typeof o!="string"||!(an.has(o)||pr.has(o)))return B("envelope","unknown-kind");let a=o;if(!(e.as==="owner"?an:pr).has(a))return B("direction",`wrong-direction:${a}`);let c=ps[a],l=new Set([...c.required,...c.optional]);for(let u of Object.keys(s))if(!l.has(u))return B("payload","unknown-field");for(let u of c.required)if(!Object.prototype.hasOwnProperty.call(s,u))return B("payload","missing-field");return gs(a,s)}function gs(n,e){let t=(c,l)=>{let u=e[c];return typeof u!="string"||u.length!==l||!bs(u)?L("payload",`non-canonical-hex:${c}`):u},r=c=>{let l=e[c];return typeof l!="string"||!gr(l)?L("payload",`non-canonical-decimal:${c}`):l},i=(c,l,u)=>{let p=e[c];return typeof p!="number"||!Number.isInteger(p)||p<l||p>u?L("payload",`bad-integer:${c}`):p},s=c=>{let l=e[c];return typeof l!="string"||l.length===0?L("payload",`bad-string:${c}`):l},o=c=>{let l=e[c];return typeof l!="object"||l===null||Array.isArray(l)?L("payload",`bad-object:${c}`):l},a=()=>{let c=e.aud;if(!Array.isArray(c))return L("payload","bad-audience");if(c.length>ss)return L("payload","audience-too-many","capacity");let l=[];for(let u of c){if(typeof u!="string"||u.length===0)return L("payload","bad-audience-label");if(U(u)>os)return L("payload","audience-label-too-long","capacity");l.push(u)}return l},d=c=>{if(!Object.prototype.hasOwnProperty.call(e,"int"))return c?L("payload","missing-field"):void 0;let l=e.int;if(!Array.isArray(l))return L("payload","bad-interest");if(l.length>hr)return L("payload","interest-too-many","capacity");let u=[];for(let p of l){if(typeof p!="string"||p.length===0)return L("payload","bad-interest-key");if(U(p)>yr)return L("payload","interest-key-too-long","capacity");u.push(p)}return u};switch(n){case"int":{let c=t("q",fe);if(O(c))return c.refusal;let l=t("h",G);if(O(l))return l.refusal;let u=d(!0);return O(u)?u.refusal:{ok:!0,message:{k:n,q:c,h:l,int:u}}}case"join":{let c=t("q",fe);if(O(c))return c.refusal;let l=s("def");if(O(l))return l.refusal;let u=i("ver",0,Number.MAX_SAFE_INTEGER);if(O(u))return u.refusal;let p=s("store");if(O(p))return p.refusal;let y=s("key");if(O(y))return y.refusal;let f=a();if(O(f))return f.refusal;let w=d(!1);return O(w)?w.refusal:{ok:!0,message:w===void 0?{k:n,q:c,def:l,ver:u,store:p,key:y,aud:f}:{k:n,q:c,def:l,ver:u,store:p,key:y,aud:f,int:w}}}case"resume":case"aud":{let c=t("q",fe);if(O(c))return c.refusal;let l=t("h",G);if(O(l))return l.refusal;let u=a();if(O(u))return u.refusal;if(n==="resume"){let p=d(!1);return O(p)?p.refusal:{ok:!0,message:p===void 0?{k:n,q:c,h:l,aud:u}:{k:n,q:c,h:l,aud:u,int:p}}}return{ok:!0,message:{k:n,q:c,h:l,aud:u}}}case"resync":{let c=t("q",fe);if(O(c))return c.refusal;let l=t("h",G);if(O(l))return l.refusal;let u=r("g");if(O(u))return u.refusal;let p=r("have");return O(p)?p.refusal:{ok:!0,message:{k:n,q:c,h:l,g:u,have:p}}}case"alive":case"leave":case"ok":{let c=t("q",fe);if(O(c))return c.refusal;let l=t("h",G);return O(l)?l.refusal:{ok:!0,message:{k:n,q:c,h:l}}}case"act":{let c=t("q",fe);if(O(c))return c.refusal;let l=t("h",G);if(O(l))return l.refusal;let u=r("s");if(O(u))return u.refusal;let p=s("name");if(O(p))return p.refusal;let y=o("in");return O(y)?y.refusal:{ok:!0,message:{k:n,q:c,h:l,s:u,name:p,in:y}}}case"in":{let c=t("h",G);if(O(c))return c.refusal;let l=s("name");if(O(l))return l.refusal;let u=r("s");if(O(u))return u.refusal;let p=o("in");return O(p)?p.refusal:{ok:!0,message:{k:n,h:c,name:l,s:u,in:p}}}case"res":{let c=t("q",fe);if(O(c))return c.refusal;let l=t("h",G);if(O(l))return l.refusal;let u=r("s");if(O(u))return u.refusal;let p=o("out");return O(p)?p.refusal:{ok:!0,message:{k:n,q:c,h:l,s:u,out:p}}}case"man":{let c=t("h",G);if(O(c))return c.refusal;let l=t("inc",cn);if(O(l))return l.refusal;let u=r("g");if(O(u))return u.refusal;let p=r("r");if(O(p))return p.refusal;let y=i("n",1,ae);if(O(y))return y.refusal;let f=r("bytes");if(O(f))return f.refusal;if(BigInt(f)>BigInt(Se))return B("payload","snapshot-too-large","capacity");if(Object.prototype.hasOwnProperty.call(e,"q")){let w=t("q",fe);return O(w)?w.refusal:{ok:!0,message:{k:n,q:w,h:c,inc:l,g:u,r:p,n:y,bytes:f}}}return{ok:!0,message:{k:n,h:c,inc:l,g:u,r:p,n:y,bytes:f}}}case"snap":{let c=t("h",G);if(O(c))return c.refusal;let l=r("g");if(O(l))return l.refusal;let u=r("r");if(O(u))return u.refusal;let p=i("n",1,ae);if(O(p))return p.refusal;let y=i("i",0,p-1);if(O(y))return y.refusal;let f=e.d;return typeof f!="string"||!pn(f)?B("payload","non-canonical-base64:d"):{ok:!0,message:{k:n,h:c,g:l,r:u,i:y,n:p,d:f}}}case"delta":{let c=t("h",G);if(O(c))return c.refusal;let l=r("g");if(O(l))return l.refusal;let u=r("base");if(O(u))return u.refusal;let p=r("r");if(O(p))return p.refusal;let y=ms(e.ops);return O(y)?y.refusal:{ok:!0,message:{k:n,h:c,g:l,base:u,r:p,ops:y}}}case"no":{let c=e.code;if(typeof c!="string"||!hs.has(c))return B("payload","unknown-code");let l=Object.prototype.hasOwnProperty.call(e,"q"),u=Object.prototype.hasOwnProperty.call(e,"h"),p=Object.prototype.hasOwnProperty.call(e,"s");if(!l&&!u)return B("payload","no-names-nothing");if(!l){if(c!=="closed"&&c!=="owner-lost")return B("payload","unsolicited-no-must-be-closed-or-owner-lost");if(p)return B("payload","unsolicited-no-carries-no-sequence")}let y={k:"no",code:c};if(l){let f=t("q",fe);if(O(f))return f.refusal;y.q=f}if(u){let f=t("h",G);if(O(f))return f.refusal;y.h=f}if(p){let f=r("s");if(O(f))return f.refusal;y.s=f}if(Object.prototype.hasOwnProperty.call(e,"detail")){let f=e.detail;if(typeof f!="string")return B("payload","bad-string:detail");if(U(f)>as)return B("payload","detail-too-long","capacity");y.detail=f}return{ok:!0,message:y}}}}function ms(n){if(!Array.isArray(n))return L("payload","bad-ops");if(n.length>dn)return L("payload","ops-too-many","capacity");let e=[];for(let t of n){if(typeof t!="object"||t===null||Array.isArray(t))return L("payload","bad-op");let r=t,i=r.o;if(i!=="r"&&i!=="x")return L("payload","bad-op-kind");let s=i==="r"?["o","p","val"]:["o","p"];for(let d of Object.keys(r))if(!s.includes(d))return L("payload","unknown-field");if(i==="r"&&!Object.prototype.hasOwnProperty.call(r,"val"))return L("payload","missing-field");let o=r.p;if(!Array.isArray(o))return L("payload","bad-path");if(o.length>un)return L("payload","path-too-deep","capacity");let a=[];for(let d of o){if(typeof d!="string"||d.length===0)return L("payload","bad-segment");if(U(d)>Ge)return L("payload","segment-too-long","capacity");a.push(d)}e.push(i==="r"?{o:i,p:a,val:r.val}:{o:i,p:a})}return e}function bs(n){for(let e=0;e<n.length;e+=1){let t=n.charCodeAt(e),r=t>=48&&t<=57,i=t>=97&&t<=102;if(!r&&!i)return!1}return n.length>0}function gr(n){if(n.length===0||n.length>cs)return!1;for(let e=0;e<n.length;e+=1){let t=n.charCodeAt(e);if(t<48||t>57)return!1}return n.length>1&&n.charCodeAt(0)===48?!1:BigInt(n)<=ls}function pn(n){if(n.length===0)return!0;if(n.length%4!==0||!ys.test(n))return!1;let e=n.endsWith("==")?2:n.endsWith("=")?1:0;if(e===0)return!0;let t=n.charCodeAt(n.length-e-1),r=Ss(t);return r<0?!1:(r&(e===2?15:3))===0}function Ss(n){return n>=65&&n<=90?n-65:n>=97&&n<=122?n-97+26:n>=48&&n<=57?n-48+52:n===43?62:n===47?63:-1}function le(n){if(!gr(n))throw new RangeError(`not a canonical decimal: ${JSON.stringify(n)}`);return BigInt(n)}function fn(n,e){return ln(n,e,new Set)}function ln(n,e,t){if(n===null)return null;switch(typeof n){case"boolean":case"string":return null;case"number":return Number.isFinite(n)?null:`non-finite-number:${e}`;case"object":{let r=n;if(t.has(r))return`circular:${e}`;if("toJSON"in r)return`to-json-transform:${e}`;if(r instanceof Map||r instanceof Set||r instanceof WeakMap||r instanceof WeakSet)return`map-or-set:${e}`;if(Object.getOwnPropertySymbols(r).length>0)return`symbol-key:${e}`;t.add(r);try{if(Array.isArray(n)){for(let i=0;i<n.length;i+=1){let s=ln(n[i],`${e}[${i}]`,t);if(s!==null)return s}return null}for(let[i,s]of Object.entries(n)){let o=ln(s,`${e}.${i}`,t);if(o!==null)return o}return null}finally{t.delete(r)}}default:return`not-json:${e}`}}function ws(n){switch(n.k){case"act":case"in":return[["in",n.in]];case"res":return[["out",n.out]];case"delta":return n.ops.flatMap((e,t)=>e.o==="r"?[[`ops[${t}].val`,e.val]]:[]);default:return[]}}function _(n){for(let[o,a]of ws(n)){let d=fn(a,o);if(d!==null)throw new RangeError(`refusing to encode an invalid ${n.k}: ${d}`)}let e={v:fr,k:n.k},t=n;for(let o of fs[n.k]){if(o==="v"||o==="k"||!Object.prototype.hasOwnProperty.call(t,o))continue;let a=t[o];a!==void 0&&(e[o]=a)}let r=JSON.stringify(e),i=an.has(n.k)?"owner":"replica",s=Me(r,{maxBytes:Number.MAX_SAFE_INTEGER,as:i});if(!s.ok)throw new RangeError(`refusing to encode an invalid ${n.k}: ${s.reason}`);return r}var vs=192,mr=1024,br=197;function Os(n){return Math.floor((n-vs)/4)*3}function wr(n){if(!Number.isFinite(n)||!Number.isInteger(n)||n<=0)throw new h("capacity",`the transport reported no usable event size (${String(n)})`);if(br>n)throw new h("capacity",`the frozen envelopes need ${br} B and the transport allows ${n} B`);let e=Os(n);if(e<mr)throw new h("capacity",`a ${n} B event leaves ${e} B per chunk, below the ${mr} B floor`);if(e*ae<Se)throw new h("capacity",`a ${n} B event leaves ${e} B per chunk: ${ae} of them cover ${e*ae} B, below the ${Se} B snapshot bound`);return e}function vr(n,e){if(e<1)throw new h("capacity",`a chunk budget of ${e} B cannot carry anything`);try{let s=fn(n,"state");if(s!==null)throw new h("invalid-data",`the projected state is not JSON: ${s}`)}catch(s){throw s instanceof h?s:new h("invalid-data",`the projected state is not JSON: ${String(s)}`,{cause:s})}let t;try{t=JSON.stringify(n)}catch(s){throw new h("invalid-data","the projected state is not JSON",{cause:s})}if(t===void 0)throw new h("invalid-data","the projected state is not JSON");let r=new TextEncoder().encode(t);if(r.length>Se)throw new h("capacity",`the projection is ${r.length} B and the bound is ${Se} B`);let i=[];for(let s=0;s<r.length;s+=e)i.push(xs(r.subarray(s,s+e)));if(i.length>ae)throw new h("capacity",`the projection needs ${i.length} chunks and the bound is ${ae}`);return{bytes:r.length,n:i.length,pieces:i}}var Sr=32768;function xs(n){let e="";for(let t=0;t<n.length;t+=Sr)e+=String.fromCharCode(...n.subarray(t,t+Sr));return btoa(e)}function Or(n){let e=atob(n),t=new Uint8Array(e.length);for(let r=0;r<e.length;r+=1)t[r]=e.charCodeAt(r);return t}var yn=1e4,ks=8*1024*1024;function V(n,e,t="invalid-data"){return{ok:!1,code:t,reason:n,fatal:e}}var hn=class{constructor(e,t){this.manifest=e;this.openedAt=t;this.pieces=new Array(e.n),this.encoded=new Array(e.n)}manifest;openedAt;pieces;encoded;admitted=0;held=0;closed=!1;get bytesHeld(){return this.held}get bytesReserved(){return this.closed?0:Math.max(Number(this.manifest.bytes),this.held)}get have(){return this.admitted}get reclaimed(){return this.closed}reclaim(){this.closed=!0,this.pieces.fill(void 0),this.encoded.fill(void 0),this.admitted=0,this.held=0}expired(e){return e-this.openedAt>=yn}accept(e,t,r){if(this.closed)return V("chunk-wrong-assembly",!1);if(this.expired(r))return this.reclaim(),V("deadline",!0,"timeout");let i=this.manifest;if(e.h!==i.h||e.g!==i.g||e.r!==i.r||e.n!==i.n)return V("chunk-wrong-assembly",!1);if(!Number.isInteger(e.i)||e.i<0||e.i>=i.n)return V("chunk-index",!1);if(!pn(e.d))return V("chunk-non-canonical",!1);let s=this.encoded[e.i];if(s!==void 0)return s===e.d?{ok:!0,done:!1,have:this.admitted}:(this.reclaim(),V("chunk-conflict",!0));let o=Or(e.d),a=Number(i.bytes);if(this.held+o.length>a)return this.reclaim(),V("byte-total-mismatch",!0);if(this.encoded[e.i]=e.d,this.pieces[e.i]=o,this.admitted+=1,this.held+=o.length,this.admitted<i.n)return{ok:!0,done:!1,have:this.admitted};if(this.held!==a)return this.reclaim(),V("byte-total-mismatch",!0);let d=new Uint8Array(this.held),c=0;for(let p of this.pieces){if(p===void 0)return this.reclaim(),V("byte-total-mismatch",!0);d.set(p,c),c+=p.length}let l=new TextDecoder("utf-8",{fatal:!0}),u;try{let p=De(l.decode(d));if(!p.ok)return this.reclaim(),V("assembled-not-json",!0);u=p.value}catch{return this.reclaim(),V("assembled-not-json",!0)}try{t(u)}catch{return this.reclaim(),V("assembled-invalid",!0)}return this.reclaim(),{ok:!0,done:!0,document:u}}},Rt=class n{constructor(e=ks){this.maxTotalBytes=e}maxTotalBytes;live=new Map;static key(e,t){return`${e}/${t}`}get bytesHeld(){let e=0;for(let t of this.live.values())e+=t.bytesHeld;return e}get bytesReserved(){let e=0;for(let t of this.live.values())e+=t.bytesReserved;return e}get size(){return this.live.size}get(e,t){return this.live.get(n.key(e,t))}open(e,t){if(!Number.isInteger(e.n)||e.n<1||e.n>ae)return V("manifest-chunk-count",!0);let r=Number(e.bytes);if(!Number.isSafeInteger(r)||r<0||r>Se)return V("manifest-bytes",!0,"capacity");let i=n.key(e.h,e.g),s=this.live.get(i),o=s?.bytesReserved??0;if(this.bytesReserved-o+r>this.maxTotalBytes)return V("assembly-too-large",!0,"capacity");s?.reclaim(),this.live.delete(i);let a=new hn(e,t);return this.live.set(i,a),a}reclaim(e,t){let r=n.key(e,t);this.live.get(r)?.reclaim(),this.live.delete(r)}reclaimHandle(e){for(let[t,r]of[...this.live])t.startsWith(`${e}/`)&&(r.reclaim(),this.live.delete(t))}sweep(e){let t=0;for(let[r,i]of[...this.live])i.expired(e)&&(i.reclaim(),this.live.delete(r),t+=1);return t}clear(){for(let e of this.live.values())e.reclaim();this.live.clear()}};function ce(n,e){if(Object.is(n,e))return e;if(Array.isArray(e)){let t=e;if(!Array.isArray(n))return kr(t,void 0);let r=kr(t,n);return n.length===t.length&&Es(n,r)?n:r}if(xr(e)){if(!xr(n))return Er(e,void 0);let t=Er(e,n),r=Object.keys(e);return r.length===Object.keys(n).length&&r.every(i=>Ar(n,i)&&Object.is(n[i],t[i]))?n:t}return e}function _t(n,e){let t=Object.keys(e);if(t.length===0)return n;let r=!1,i={...n};for(let s of t){let o=Rr(n,s),a=ce(o,e[s]);Object.is(o,a)||(Object.defineProperty(i,s,{value:a,enumerable:!0,writable:!0,configurable:!0}),r=!0)}return r?Object.freeze(i):n}function xr(n){if(typeof n!="object"||n===null||Array.isArray(n))return!1;let e=Object.getPrototypeOf(n);return e===Object.prototype||e===null}function Es(n,e){for(let t=0;t<e.length;t+=1)if(!Object.is(n[t],e[t]))return!1;return!0}function kr(n,e){let t=new Array(n.length);for(let r=0;r<n.length;r+=1)t[r]=ce(e?.[r],n[r]);return Object.freeze(t)}function Ar(n,e){return Object.prototype.hasOwnProperty.call(n,e)}function Rr(n,e){if(n!==void 0)return Ar(n,e)?n[e]:void 0}function Er(n,e){let t={};for(let r of Object.keys(n))Object.defineProperty(t,r,{value:ce(Rr(e,r),n[r]),enumerable:!0,writable:!1,configurable:!1});return Object.freeze(t)}var As=["__proto__","constructor","prototype"],Rs=new Set(As);function de(n,e,t="invalid-data"){return{ok:!1,code:t,reason:n,resync:e}}function _r(n,e,t){if(e.length>dn)return de("ops-too-many",!1,"capacity");for(let a of e){if(a.p.length>un)return de("path-too-deep",!1,"capacity");for(let d of a.p){if(U(d)>Ge)return de("segment-too-long",!1,"capacity");if(Rs.has(d))return de("segment-forbidden",!1)}if(a.o==="x"&&a.p.length===0)return de("root-remove",!1)}let r=n,i=new WeakSet;for(let a of e){if(a.p.length===0){a.o==="r"&&(r=a.val);continue}if(!Ir(r))return de("parent-not-object",!0);let d=Cr(r,i);r=d;let c=_s(d,a.p.slice(0,-1),i);if(c===Pr)return de("missing-parent",!0);if(c===jr)return de("parent-not-object",!0);let l=c,u=a.p[a.p.length-1];if(a.o==="x"){if(!Object.prototype.hasOwnProperty.call(l,u))return de("missing-key",!0);delete l[u];continue}l[u]=a.val}let s;try{s=t(r)}catch{return de("invalid-state",!0)}let o=ce(n,s);return{ok:!0,next:o,changed:!Object.is(o,n)}}var Pr=Symbol("missing-parent"),jr=Symbol("parent-not-object");function _s(n,e,t){let r=n;for(let i of e){let s=r;if(!Object.prototype.hasOwnProperty.call(s,i))return Pr;let o=s[i];if(!Ir(o))return jr;let a=Cr(o,t);s[i]=a,r=a}return r}function Ir(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Cr(n,e){if(e.has(n))return n;let t=Object.assign(Object.create(null),n);return e.add(t),t}var he=class{#e;#t=new Set;#s=new Set;#n;#r;#b=0;#l=null;#o=0;#u=!1;constructor(e){this.#e=e.definition,this.#n=ce(void 0,this.#d(e.initialState)),this.#r=Object.freeze({phase:e.phase??"ready",stale:!1,error:null})}getState(){return this.#n}get revision(){return this.#b}get inTransaction(){return this.#l!==null&&this.#l.active}subscribe(e,t,r){let i=t===void 0?this.#y(e):this.#O(e,t,r);this.#t.add(i);let s=!0;return()=>{s&&(s=!1,this.#t.delete(i))}}getStatus(){return this.#r}subscribeStatus(e){this.#s.add(e);let t=!0;return()=>{t&&(t=!1,this.#s.delete(e))}}setStatus(e){let t=this.#r,r={phase:e.phase??t.phase,stale:e.stale??t.stale,error:e.error===void 0?t.error:e.error};if(!(r.phase===t.phase&&r.stale===t.stale&&Object.is(r.error,t.error))){this.#r=Object.freeze(r);for(let i of[...this.#s])this.#s.has(i)&&Pt(()=>i(this.#r,t))}}transact(e,t){if(this.#a(),this.#l!==null)throw new h("action-rejected","a store transaction is already open on this store; handlers are synchronous and must not nest");let r={staged:this.#n,active:!0};this.#l=r;try{let i=e(this.#c(r,t));if(Ps(i))throw new h("action-rejected","a store handler returned a thenable; handlers are synchronous so that a throw can discard the whole transaction");return this.#m(r.staged),i}finally{r.active=!1,this.#l=null}}applyOwnerUpdate(e){this.#a();let t=this.#l;if(t!==null&&t.active){t.staged=this.#f(t.staged,e);return}let r=this.#f(this.#n,e);this.#m(r)}applySnapshot(e){this.#a();let t=this.#l;if(t!==null&&t.active){t.staged=this.#d(e);return}this.#m(this.#d(e))}applyEntities(e,t){this.#a();let r=this.#e.entities?.[e];if(r===void 0||!Object.prototype.hasOwnProperty.call(this.#e.entities,e))throw new h("invalid-data",`store '${this.#e.id}' declares no per-entity parser for '${e}'; declare it in \`entities\` or write through setState`);let i=this.#l,s=i!==null&&i.active?i.staged:this.#n,o=s[e];if(o!==void 0&&!sn(o))throw new h("invalid-data",`store '${this.#e.id}': '${e}' is not an entity map in the current state`);let a=[];for(let p of Object.keys(t)){if(p.length===0)throw new h("invalid-data",`store '${this.#e.id}': an entity id in '${e}' is empty`);let y=t[p];if(y===void 0){a.push([p,void 0]);continue}try{a.push([p,this.runReadOnly(()=>r(y))])}catch(f){throw f instanceof h?f:new h("invalid-data",`entity '${e}.${p}' failed the '${this.#e.id}' entity validator: ${String(f)}`,{cause:f})}}if(i!==null&&i.active){let p={...o??{}};for(let[y,f]of a)f===void 0?delete p[y]:gn(p,y,f);i.staged=_t(s,{[e]:p});return}let d=!1,c=[];for(let[p,y]of a){let f=o!==void 0&&Object.prototype.hasOwnProperty.call(o,p),w=f?o[p]:void 0;if(y===void 0){f&&(d=!0),c.push([p,void 0]);continue}let R=ce(w,y);Object.is(w,R)||(d=!0),c.push([p,R])}if(!d)return;let l={...o??{}};for(let[p,y]of c)y===void 0?delete l[p]:gn(l,p,y);let u={...s};gn(u,e,Object.freeze(l)),this.#p(Object.freeze(u))}applyDelta(e){this.#a();let t=_r(this.#n,e,r=>this.#d(r));return t.ok&&t.changed&&this.#h(t.next),t}runReadOnly(e){this.#o+=1;try{return e()}finally{this.#o-=1}}close(){this.#u||(this.#u=!0,this.setStatus({phase:"closed",stale:!0}),this.#t.clear(),this.#s.clear())}#c(e,t){return{peer:t,getState:()=>(this.#w(e),e.staged),setState:r=>{if(this.#w(e),this.#o>0)throw new h("action-rejected","a read-only store callback may not write state; validators, authorize, project and update functions run with setters fenced");e.staged=this.#f(e.staged,r)}}}#f(e,t){let r=typeof t=="function"?this.runReadOnly(()=>t(e)):t;return _t(e,r)}#m(e){this.#h(this.#d(e))}#h(e){let t=ce(this.#n,e);Object.is(t,this.#n)||this.#p(t)}#p(e){let t=this.#n;this.#n=e,this.#b+=1;for(let r of[...this.#t])this.#t.has(r)&&r.notify(e,t)}#d(e){try{return this.runReadOnly(()=>this.#e.state(e))}catch(t){throw t instanceof h?t:new h("invalid-data",`state failed the '${this.#e.id}' validator: ${String(t)}`,{cause:t})}}#y(e){return{notify:(t,r)=>{Pt(()=>e(t,r))}}}#O(e,t,r){let i=r?.equality??Object.is,s=this.runReadOnly(()=>e(this.#n));return r?.fireImmediately===!0&&Pt(()=>t(s,s)),{notify:o=>{let a=this.runReadOnly(()=>e(o)),d=s;i(a,d)||(s=a,Pt(()=>t(a,d)))}}}#w(e){if(!e.active)throw new h("action-rejected","this store transaction has already ended; its context cannot read or write from a later turn")}#a(){if(this.#u)throw new h("closed","this store handle is closed")}};function Ps(n){return n===null||typeof n!="object"&&typeof n!="function"?!1:typeof n.then=="function"}function Pt(n){try{n()}catch(e){console.error("[@net-mesh/browser] store listener threw",e)}}function gn(n,e,t){Object.defineProperty(n,e,{value:t,enumerable:!0,writable:!0,configurable:!0})}var js=32,Is=64*1024,Cs=6e4,Hs=2048,Ls=(1n<<64n)-1n,Ts="";function Hr(n,e){return`${n}${Ts}${mn(e)}`}function mn(n){if(n===null||typeof n=="boolean")return String(n);if(typeof n=="number"){if(!Number.isFinite(n))throw new h("invalid-data","a canonical request cannot contain a non-finite number");return String(n)}if(typeof n=="string")return JSON.stringify(n);if(Array.isArray(n))return`[${n.map(i=>mn(i)).join(",")}]`;let e=n;return`{${Object.keys(e).sort().map(i=>`${JSON.stringify(i)}:${mn(e[i])}`).join(",")}}`}function Ds(n){return new TextEncoder().encode(n).byteLength}function wn(n){return Ds(n)>Hs}function Lr(n){if(wn(n))throw new h("invalid-data","this canonical form needs the digest path");return{form:"inline",value:n}}async function Tr(n){let e=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(n)),t=new Uint8Array(e),r="";for(let i of t)r+=i.toString(16).padStart(2,"0");return{form:"digest",value:r}}function Ms(n,e){return n.form===e.form&&n.value===e.value}var bn=class{constructor(e=js,t=Is,r=Cs){this.maxEntries=e;this.maxBytes=t;this.maxAgeMs=r}maxEntries;maxBytes;maxAgeMs;#e=0n;#t=new Map;#s=0;get floor(){return this.#e.toString()}get size(){return this.#t.size}get bytesHeld(){return this.#s}disposition(e,t,r){if(this.expire(r),e>=Ls)return{kind:"exhausted"};let i=this.#t.get(e.toString());return i!==void 0?Ms(i.binding,t)?{kind:"replay",outcome:i.outcome}:{kind:"conflict"}:e<=this.#e?{kind:"expired"}:{kind:"execute"}}retain(e,t,r,i){let s=qs(t,r);this.#t.set(e.toString(),{s:e,binding:t,outcome:r,bytes:s,at:i}),this.#s+=s,this.evict(i)}expire(e){for(let t of this.ordered()){if(e-t.at<this.maxAgeMs)break;this.drop(t)}}evict(e){for(this.expire(e);this.#t.size>this.maxEntries||this.#s>this.maxBytes;){let t=this.ordered()[0];if(t===void 0)return;this.drop(t)}}drop(e){this.#t.delete(e.s.toString()),this.#s-=e.bytes,e.s>this.#e&&(this.#e=e.s)}ordered(){return[...this.#t.values()].sort((e,t)=>e.s<t.s?-1:e.s>t.s?1:0)}};function qs(n,e){let t=e.kind==="result"?JSON.stringify(e.out):e.code;return U(n.value)+U(t)}var Sn=class{#e=new Map;#t=0;get dropped(){return this.#t}admit(e,t){let r=this.#e.get(e);return r!==void 0&&t<=r?(this.#t+=1,!1):(this.#e.set(e,t),!0)}latest(e){let t=this.#e.get(e);return t===void 0?null:t.toString()}},jt=class{#e=new Map;#t=new Map;ledger(e){let t=this.#e.get(e);return t===void 0&&(t=new bn,this.#e.set(e,t)),t}inputs(e){let t=this.#t.get(e);return t===void 0&&(t=new Sn,this.#t.set(e,t)),t}forget(e){this.#e.delete(e),this.#t.delete(e)}get size(){return this.#e.size}};var Ns=32,Ws=256,Dr=6e4,Nr=256;function ye(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}var Us="0".repeat(16),$s="0".repeat(32),It=class{constructor(e){this.deps=e;if(this.chunkBytes=wr(e.maxEventBytes),this.incarnation=e.newIncarnation(),this.incarnation.length!==cn)throw new h("invalid-data","newIncarnation must return 16 lowercase hex");let t=(typeof e.project=="function"?1:0)+(typeof e.projectFor=="function"?1:0),r=e.definition.visibility;if(t>1||t===0&&r===void 0)throw new h("invalid-data","a host needs one of `project` and `projectFor`, or a definition that declares `visibility`");this.visibility=r===void 0?null:Le(r),this.perPlayer=typeof e.projectFor=="function"||this.visibility?.perPlayer===!0,this.core=new he({definition:e.definition,initialState:e.definition.empty()})}deps;handles=new Map;counters={};chunkBytes;incarnation;core;pending=0;ledgers=new jt;deferred=new Map;revisionBeforeCommit=0;perPlayer;visibility;warned=new Set;warnOnce(e){if(!(this.deps.warn===void 0||this.warned.has(e))){this.warned.add(e);try{this.deps.warn(e)}catch{}}}viewKey(e,t){return this.perPlayer?JSON.stringify([e,t]):JSON.stringify(t)}get sparseViews(){return this.sparseViewCount}sparseViewCount=0;snapshotCounters(){return{...this.counters}}get handleCount(){return this.handles.size}handle(e){return this.handles.get(e)}commit(e){let t=this.core.inTransaction,r=this.core.getState();if(t||(this.revisionBeforeCommit=this.core.revision),this.core.applySnapshot(e),t)return this.accept([]);let i=this.core.getState();return Object.is(r,i)?this.accept([]):this.accept(this.propagate(r,i))}commitEntities(e,t){let r=this.core.inTransaction,i=this.core.getState();if(r||(this.revisionBeforeCommit=this.core.revision),this.core.applyEntities(e,t),r)return this.accept([]);let s=this.core.getState();return Object.is(i,s)?this.accept([]):this.accept(this.propagate(i,s))}propagate(e,t){let r=[],i=String(this.core.revision),s=new Map,o=new Map,a;for(let d of[...this.handles.values()]){if(this.deferred.has(d.h))continue;if(!this.permitsRead(d.peer,d.audience)){this.forget(d.h,"refused"),r.push(this.no(d.peer,d.h,"closed",null));continue}let c=this.viewKey(d.peer,d.audience),l;if(this.interestFns.length>0&&d.interest!==null){let y=s.get(c);if(y===void 0){if(a===void 0&&(a=this.entityDelta(e,t)),y=a===null?void 0:this.sparseInterestDiff(d.peer,d.audience,a),y===void 0){let f=this.project(d.peer,d.audience,e),w=this.project(d.peer,d.audience,t);y=f===null||w===null?null:this.interestDiff(f,w)}else this.sparseViewCount+=1;s.set(c,y)}l=y===null?null:this.interestOps(y,d.interest)}else if(l=o.get(c),l===void 0){let y=this.project(d.peer,d.audience,e),f=this.project(d.peer,d.audience,t);l=y===null||f===null?null:Mr(y,f),o.set(c,l)}if(l===null){this.forget(d.h),r.push(this.no(d.peer,d.h,"closed",null));continue}if(l.length===0)continue;let u=qr({k:"delta",h:d.h,g:String(d.generation),base:String(d.revision),r:i,ops:l},this.deps.maxEventBytes);if(u!==null){r.push({peer:d.peer,h:d.h,frame:u}),this.handles.set(d.h,{...d,revision:this.core.revision});continue}let p=this.install(d,null);if(p===null){this.forget(d.h),r.push(this.no(d.peer,d.h,"closed",null));continue}r.push(...p)}return r}getState(){return this.core.getState()}subscribe(e){return this.core.subscribe((t,r)=>{e(t,r)})}get currentRevision(){return this.core.revision}localRead(e,t){return this.permitsRead(e,t)}localView(e,t,r=null){let i=this.project(e,t);return i===null?null:this.filterInterest(i,r)}localAct(e,t,r){if(!Object.prototype.hasOwnProperty.call(this.deps.definition.actions,e))return{outcome:{kind:"refusal",code:"invalid-data"},dispatched:this.refuse("local-act-unknown-name")};if(!this.permitsAction(r,e,t))return{outcome:{kind:"refusal",code:"forbidden"},dispatched:this.refuse("local-act-forbidden")};let i=this.deps.definition.actions[e],s=this.core.getState();this.revisionBeforeCommit=this.core.revision;let o;try{let c=this.deps.actions[e];o={kind:"result",out:this.core.transact(u=>{let p=i.output(c(i.input(t),u)),y=_({k:"res",q:Us,h:$s,s:"1",out:p});if(U(y)>this.deps.maxEventBytes)throw new h("capacity","the result does not fit the message budget");return p},r)}}catch(c){o={kind:"refusal",code:c instanceof h&&c.code==="capacity"?"capacity":"action-rejected"}}let a=this.core.getState(),d=Object.is(s,a)?[]:this.propagate(s,a);return{outcome:o,dispatched:o.kind==="refusal"?this.refuse(`local-act-${o.code}`,d):this.accept(d)}}localInput(e,t,r){if(!Object.prototype.hasOwnProperty.call(this.deps.definition.inputs,e))return this.refuse("local-in-unknown-name");if(!this.permitsInput(r,e,t))return this.refuse("local-in-forbidden");let i=this.core.getState();this.revisionBeforeCommit=this.core.revision;try{this.core.transact(o=>{let a=this.deps.definition.inputs[e],d=this.deps.inputs[e];d(a(t),o)},r)}catch{return this.refuse("local-in-rejected")}let s=this.core.getState();return this.accept(Object.is(i,s)?[]:this.propagate(i,s))}receive(e,t,r=this.deps.now()){let i=Me(e,{maxBytes:this.deps.maxEventBytes,as:"owner"});if(!i.ok)return this.refuse(i.reason,[]);let s=i.message;if(s.k==="join")return this.join(s,t,r);let o=this.bind(s.h,t,r);if(typeof o=="string")return this.refuse(o,[this.no(t,s.h,"closed",Fs(s))]);switch(s.k){case"alive":return this.handles.set(o.h,{...o,lastSeen:r}),this.accept([{peer:t,h:o.h,frame:_({k:"ok",q:s.q,h:o.h})}]);case"leave":return this.forget(o.h,"left"),this.accept([{peer:t,h:o.h,frame:_({k:"ok",q:s.q,h:o.h})}]);case"int":return this.interestChange(s,o,t,r);case"act":return this.action(s,o,t,r);case"in":return this.input(s,o,t,r);case"resync":{if(!this.permitsRead(t,o.audience))return this.refuse("resync-forbidden",[this.no(t,o.h,"forbidden",s.q)]);let a={...o,lastSeen:r};this.handles.set(o.h,a);let d=this.install(a,s.q);return d===null?(this.forget(o.h),this.refuse("resync-projection-capacity",[this.no(t,o.h,"capacity",s.q)])):this.accept(d)}case"aud":case"resume":{if(!this.permitsRead(t,s.aud))return this.refuse(`${s.k}-forbidden`,[this.no(t,o.h,"forbidden",s.q)]);let a={...o,audience:[...s.aud],interest:s.k==="resume"&&s.int!==void 0?[...s.int]:o.interest,lastSeen:r};if(this.handles.set(a.h,a),!this.deps.canProject())return this.deferred.set(a.h,{q:s.q,peer:t}),this.accept([]);let d=this.install(a,s.q);return d===null?(this.forget(a.h),this.refuse(`${s.k}-projection-capacity`,[this.no(t,a.h,"capacity",s.q)])):this.accept(d)}default:return this.refuse("unreachable-kind")}}action(e,t,r,i){let s=e.name;if(!Object.prototype.hasOwnProperty.call(this.deps.definition.actions,s))return this.refuse("act-unknown-name",[this.no(r,t.h,"invalid-data",e.q)]);let o;try{o=Hr(s,e.in)}catch{return this.refuse("act-uncanonical",[this.no(r,t.h,"invalid-data",e.q)])}if(!wn(o))return this.decide(e,t,r,i,Lr(o));if(this.pending>=Ns)return this.refuse("act-pending-bound",[this.no(r,t.h,"capacity",e.q)]);this.pending+=1;let a=Tr(o).then(d=>{let c=this.deps.now(),l=this.bind(e.h,r,c);return typeof l=="string"?this.refuse(l,[this.no(r,e.h,"closed",e.q)]):this.decide(e,l,r,c,d)}).catch(()=>this.refuse("act-digest-failed",[this.no(r,e.h,"indeterminate",e.q)])).finally(()=>{this.pending-=1});return{out:[],refused:null,deferred:a}}decide(e,t,r,i,s){let o=this.ledgers.ledger(t.h),a=le(e.s),d=o.disposition(a,s,i);switch(d.kind){case"exhausted":return this.refuse("act-sequence-exhausted",[this.no(r,t.h,"capacity",e.q)]);case"conflict":return this.refuse("act-binding-mismatch",[this.no(r,t.h,"invalid-data",e.q)]);case"expired":return this.refuse("act-result-expired",[this.no(r,t.h,"result-expired",e.q)]);case"replay":return this.permitsAction(r,e.name,e.in)?(this.renew(t,i),this.accept([this.reply(t,r,e.q,a,d.outcome)])):this.refuse("act-forbidden-replay",[this.no(r,t.h,"forbidden",e.q)]);case"execute":break}if(!this.permitsAction(r,e.name,e.in))return o.retain(a,s,{kind:"refusal",code:"forbidden"},i),this.renew(t,i),this.refuse("act-forbidden",[this.no(r,t.h,"forbidden",e.q)]);let c=this.deps.definition.actions[e.name],l=this.core.getState();this.revisionBeforeCommit=this.core.revision;let u;try{let f=this.deps.actions[e.name];u={kind:"result",out:this.core.transact(R=>{let P=c.input(e.in),M=c.output(f(P,R)),H=_({k:"res",q:e.q,h:t.h,s:e.s,out:M});if(U(H)>this.deps.maxEventBytes)throw new h("capacity","the result does not fit the message budget");return M},r)}}catch(f){u={kind:"refusal",code:f instanceof h&&f.code==="capacity"?"capacity":"action-rejected"}}o.retain(a,s,u,i),this.renew(t,i);let p=this.core.getState(),y=Object.is(l,p)?[]:this.propagate(l,p);return this.accept([this.reply(t,r,e.q,a,u),...y])}input(e,t,r,i){let s=e.name;if(!Object.prototype.hasOwnProperty.call(this.deps.definition.inputs,s))return this.refuse("in-unknown-name");if(!this.ledgers.inputs(t.h).admit(s,le(e.s)))return this.refuse("in-stale-sequence");if(!this.permitsInput(r,s,e.in))return this.refuse("in-forbidden");let o=this.core.getState();this.revisionBeforeCommit=this.core.revision;try{this.core.transact(d=>{let c=this.deps.definition.inputs[s],l=this.deps.inputs[s];l(c(e.in),d)},r)}catch{return this.refuse("in-rejected")}this.renew(t,i);let a=this.core.getState();return this.accept(Object.is(o,a)?[]:this.propagate(o,a))}reply(e,t,r,i,s){let o=s.kind==="result"?_({k:"res",q:r,h:e.h,s:i.toString(),out:s.out}):_({k:"no",q:r,h:e.h,code:s.code,s:i.toString()});return{peer:t,h:e.h,frame:o}}permitsAction(e,t,r){let i={type:"action",peer:e,name:t,input:r};try{return this.deps.authorize(i)===!0}catch{return!1}}permitsInput(e,t,r){let i={type:"input",peer:e,name:t,input:r};try{return this.deps.authorize(i)===!0}catch{return!1}}renew(e,t){let r=this.handles.get(e.h);r!==void 0&&this.handles.set(e.h,{...r,lastSeen:t})}forget(e,t="dropped"){let r=this.handles.get(e);this.handles.delete(e),this.ledgers.forget(e),this.deferred.delete(e),r!==void 0&&(this.presenceChanged(r.peer,t),this.membershipChanged())}present=new Set;localPlayers=new Set;pendingEvents=[];areas=new Map;areasAt=-1;ending=!1;get wantsEvents(){return this.deps.onEvent!==void 0||this.deps.areaOf!==void 0}isPresent(e){if(this.localPlayers.has(e))return!0;for(let t of this.handles.values())if(t.peer===e)return!0;return!1}presenceChanged(e,t,r=[]){if(!this.wantsEvents||this.ending)return;let i=this.isPresent(e),s=this.present.has(e);i!==s&&(i?(this.present.add(e),this.pendingEvents.push(Object.freeze({type:"join",peer:e,audience:Object.freeze([...r])}))):(this.present.delete(e),this.areas.delete(e),this.pendingEvents.push(Object.freeze({type:"leave",peer:e,reason:t??"dropped"}))))}localPresence(e,t,r=[],i="left"){t?this.localPlayers.add(e):this.localPlayers.delete(e),this.presenceChanged(e,t?null:i,r)}detectAreas(){let e=this.deps.areaOf;if(e===void 0||this.ending||this.areasAt===this.core.revision&&[...this.present].every(r=>this.areas.has(r)))return;this.areasAt=this.core.revision;let t=this.core.getState();for(let r of this.present){let i;try{let a=this.core.runReadOnly(()=>e(t,r));i=typeof a=="string"?a:null}catch{i=null}let s=this.areas.has(r),o=s?this.areas.get(r)??null:null;this.areas.set(r,i),(s?o!==i:i!==null)&&this.pendingEvents.push(Object.freeze({type:"area",peer:r,from:o,to:i}))}}drainEvents(){let e=[];if(!this.wantsEvents)return this.accept(e);for(let t=0;;t+=1){this.pendingEvents.length===0&&this.detectAreas();let r=this.pendingEvents.shift();if(r===void 0)break;if(t>=Nr){this.pendingEvents.length=0,this.counters["event-rounds-bound"]=(this.counters["event-rounds-bound"]??0)+1;break}let i=this.deps.onEvent;if(i===void 0)continue;let s=this.core.getState();this.revisionBeforeCommit=this.core.revision;try{this.core.transact(a=>i(r,a),r.peer)}catch{this.counters["event-rejected"]=(this.counters["event-rejected"]??0)+1;continue}let o=this.core.getState();Object.is(s,o)||e.push(...this.propagate(s,o))}return this.accept(e)}membership=new Set;membershipChanged(){for(let e of[...this.membership])try{e()}catch{}}onMembership(e){return this.membership.add(e),()=>{this.membership.delete(e)}}peers(){return[...new Set([...this.handles.values()].map(e=>e.peer))]}reauthorize(){let e=[];for(let t of[...this.handles.values()])this.permitsRead(t.peer,t.audience)||(this.forget(t.h,"refused"),e.push(this.no(t.peer,t.h,"closed",null)));return this.accept(e)}resumeDeferred(e=this.deps.now()){if(!this.deps.canProject())return this.accept([]);let t=[];for(let[r,i]of[...this.deferred]){this.deferred.delete(r);let s=this.bind(r,i.peer,e);if(typeof s=="string"){this.counters[`deferred-${s}`]=(this.counters[`deferred-${s}`]??0)+1;continue}let o=this.install(s,i.q);if(o===null){this.forget(r),t.push(this.no(i.peer,r,"capacity",i.q));continue}t.push(...o)}return this.accept(t)}get deferredCount(){return this.deferred.size}get ledgerCount(){return this.ledgers.size}accept(e,t=null){return{out:e,refused:null,deferred:t}}sweep(e){let t=[];for(let[r,i]of[...this.handles])e-i.lastSeen>=Dr&&(this.forget(r,"expired"),t.push({h:r,peer:i.peer}));return t}farewell(){this.ending=!0,this.pendingEvents.length=0;let e=[];for(let[t,r]of[...this.handles])this.forget(t),e.push(this.no(r.peer,t,"owner-lost",null));return e}get incarnationHex(){return this.incarnation}join(e,t,r){if(e.store!==this.deps.store)return this.refuse("join-other-store",[]);if(e.def!==this.deps.definition.id)return this.refuse("join-wrong-definition",[this.no(t,null,"version-mismatch",e.q)]);if(e.ver!==this.deps.definition.version)return this.refuse("join-wrong-version",[this.no(t,null,"version-mismatch",e.q)]);if(this.handles.size>=Ws)return this.refuse("join-capacity",[this.no(t,null,"capacity",e.q)]);if(!this.permitsRead(t,e.aud))return this.refuse("join-forbidden",[this.no(t,null,"forbidden",e.q)]);let i=this.newHandle();if(i===null||i.length!==G||this.handles.has(i))return this.refuse("join-handle-unusable",[this.no(t,null,"owner-lost",e.q)]);let s={h:i,inc:this.incarnation,peer:t,audience:[...e.aud],interest:e.int===void 0?null:[...e.int],generation:0,revision:this.core.revision,lastSeen:r};this.handles.set(i,s);let o=this.install(s,e.q);return o===null?(this.forget(i),this.refuse("join-projection-capacity",[this.no(t,null,"capacity",e.q)])):(this.presenceChanged(t,null,e.aud),this.membershipChanged(),this.accept(o))}install(e,t){let r=this.project(e.peer,e.audience),i=r===null?null:this.filterInterest(r,e.interest);if(i===null)return null;let s;try{s=vr(i,this.chunkBytes)}catch{return null}let o=e.generation+1;this.handles.set(e.h,{...e,generation:o,revision:this.core.revision});let a=String(o),d=String(this.core.revision),c=[{peer:e.peer,h:e.h,frame:_(t===null?{k:"man",h:e.h,inc:e.inc,g:a,r:d,n:s.n,bytes:String(s.bytes)}:{k:"man",q:t,h:e.h,inc:e.inc,g:a,r:d,n:s.n,bytes:String(s.bytes)})}];for(let l=0;l<s.n;l+=1)c.push({peer:e.peer,h:e.h,frame:_({k:"snap",h:e.h,g:a,r:d,i:l,n:s.n,d:s.pieces[l]})});return c}permitsRead(e,t){let r={type:"read",peer:e,audience:[...t]};try{return this.deps.authorize(r)===!0}catch{return!1}}newHandle(){try{return this.deps.newHandle()}catch{return null}}get interestFns(){return this.#e??=Object.entries(this.deps.definition.interest??{}).map(([e,t])=>[e,t]),this.#e}#e;interestKey(e,t,r){try{let i=this.core.runReadOnly(()=>e(t,r));return typeof i=="string"?i:null}catch{return null}}filterInterest(e,t){if(t===null||this.interestFns.length===0)return e;let r=new Set(t),i={...e};for(let[s,o]of this.interestFns){let a=i[s];if(!ye(a))continue;let d={};for(let[c,l]of Object.entries(a)){let u=this.interestKey(o,l,c);(u===null||r.has(u))&&(d[c]=l)}i[s]=d}return i}entityDelta(e,t){if(this.deps.project!==void 0||this.deps.projectFor!==void 0)return null;let r=this.deps.definition.entities;if(r===void 0)return null;let i=new Set(this.interestFns.map(([d])=>d)),s=e,o=t,a=[];for(let d of new Set([...Object.keys(s),...Object.keys(o)])){let c=Object.prototype.hasOwnProperty.call(s,d)?s[d]:void 0,l=Object.prototype.hasOwnProperty.call(o,d)?o[d]:void 0;if(Object.is(c,l))continue;if(!i.has(d)||!Object.prototype.hasOwnProperty.call(r,d)||!ye(c)||!ye(l))return null;let u=[];for(let p of new Set([...Object.keys(c),...Object.keys(l)])){let y=Object.prototype.hasOwnProperty.call(c,p)?c[p]:void 0,f=Object.prototype.hasOwnProperty.call(l,p)?l[p]:void 0;Object.is(y,f)||u.push(p)}a.push({collection:d,ids:u,before:c,after:l})}return{collections:a}}sparseInterestDiff(e,t,r){let i=Object.freeze({peer:e,audience:Object.freeze([...t])}),s=(y,f,w)=>{Object.defineProperty(y,f,{value:w,enumerable:!0,writable:!0,configurable:!0})},o={},a={};for(let{collection:y,ids:f,before:w,after:R}of r.collections){let P={},M={};for(let H of f)Object.prototype.hasOwnProperty.call(w,H)&&s(P,H,w[H]),Object.prototype.hasOwnProperty.call(R,H)&&s(M,H,R[H]);s(o,y,P),s(a,y,M)}let d=this.visibility===null?o:Te(this.visibility,o,i),c=this.visibility===null?a:Te(this.visibility,a,i),l=new Map(this.interestFns),u=this.deps.definition.entities,p=[];for(let{collection:y,ids:f}of r.collections){let w=d[y],R=c[y];if(!ye(w)||!ye(R))return;let P=u[y],M=l.get(y),H=(k,E)=>{if(k===void 0||!E)return{ok:!0,value:k};try{return{ok:!0,value:this.core.runReadOnly(()=>P(k))}}catch{return{ok:!1,value:void 0}}};for(let k of f){let E=H(Object.prototype.hasOwnProperty.call(w,k)?w[k]:void 0,d!==o),j=H(Object.prototype.hasOwnProperty.call(R,k)?R[k]:void 0,c!==a);if(!E.ok||!j.ok)return;Object.is(E.value,j.value)||E.value!==void 0&&j.value!==void 0&&JSON.stringify(E.value)===JSON.stringify(j.value)||p.push({collection:y,id:k,before:E.value,after:j.value,beforeKey:E.value===void 0?null:this.interestKey(M,E.value,k),afterKey:j.value===void 0?null:this.interestKey(M,j.value,k)})}}return{rest:[],entities:p,whole:[]}}interestDiff(e,t){let r=new Set(this.interestFns.map(([d])=>d)),i=d=>{let c={};for(let[l,u]of Object.entries(d))r.has(l)||(c[l]=u);return c},s=Mr(i(e),i(t)),o=[],a=[];for(let[d,c]of this.interestFns){let l=e[d],u=t[d];if(!ye(l)||!ye(u)){JSON.stringify(l)!==JSON.stringify(u)&&a.push({collection:d,after:u});continue}for(let p of new Set([...Object.keys(l),...Object.keys(u)])){let y=Object.prototype.hasOwnProperty.call(l,p)?l[p]:void 0,f=Object.prototype.hasOwnProperty.call(u,p)?u[p]:void 0;Object.is(y,f)||y!==void 0&&f!==void 0&&JSON.stringify(y)===JSON.stringify(f)||o.push({collection:d,id:p,before:y,after:f,beforeKey:y===void 0?null:this.interestKey(c,y,p),afterKey:f===void 0?null:this.interestKey(c,f,p)})}}return{rest:s,entities:o,whole:a}}interestOps(e,t){let r=new Set(t),i=o=>o===null||r.has(o),s=[...e.rest];for(let o of e.entities){let a=o.before!==void 0&&i(o.beforeKey);o.after!==void 0&&i(o.afterKey)?s.push({o:"r",p:[o.collection,o.id],val:o.after}):a&&s.push({o:"x",p:[o.collection,o.id]})}for(let o of e.whole){let a=this.filterInterest({[o.collection]:o.after},t);s.push({o:"r",p:[o.collection],val:a[o.collection]})}return s}interestChange(e,t,r,i){let s={...t,interest:[...e.int],lastSeen:i};this.handles.set(s.h,s);let o={peer:r,h:t.h,frame:_({k:"ok",q:e.q,h:t.h})};if(this.interestFns.length===0||this.deferred.has(t.h))return this.accept([o]);let a=this.project(r,t.audience);if(a===null)return this.forget(t.h),this.refuse("int-projection-capacity",[this.no(r,t.h,"capacity",e.q)]);let d=this.filterInterest(a,t.interest),c=this.filterInterest(a,s.interest),l=[];for(let[f]of this.interestFns){let w=d[f],R=c[f];if(!(!ye(w)||!ye(R))){for(let P of Object.keys(R))Object.prototype.hasOwnProperty.call(w,P)||l.push({o:"r",p:[f,P],val:R[P]});for(let P of Object.keys(w))Object.prototype.hasOwnProperty.call(R,P)||l.push({o:"x",p:[f,P]})}}if(l.length===0)return this.accept([o]);let u=String(this.core.revision),p=t.revision===this.core.revision?qr({k:"delta",h:t.h,g:String(t.generation),base:u,r:u,ops:l},this.deps.maxEventBytes):null;if(p!==null)return this.accept([{peer:r,h:t.h,frame:p},o]);let y=this.install(s,null);return y===null?(this.forget(t.h),this.refuse("int-projection-capacity",[this.no(r,t.h,"capacity",e.q)])):this.accept([...y,o])}project(e,t,r=this.core.getState()){try{let i=Object.freeze({peer:e,audience:Object.freeze([...t])}),s=this.deps.projectFor!==void 0?this.deps.projectFor(r,i):this.deps.project!==void 0?this.deps.project(r,t):r;this.visibility===null&&s===r&&this.warnOnce(`store '${this.deps.definition.id}': every player receives the full state. Declare \`visibility: 'open'\` on the definition if that is intended, or rules for what is secret.`);let o=this.visibility===null?s:Te(this.visibility,s,i);if(o===r)return r;try{return this.deps.definition.state(o)}catch(a){throw this.warnOnce(`store '${this.deps.definition.id}': a projection failed the state validator, so the player got empty() \u2014 ${a instanceof Error?a.message:String(a)}`+(this.visibility===null?"":" (a hidden field is the HIDDEN marker: wrap its parser with hiddenOr)")),a}}catch{try{return this.deps.definition.empty()}catch{return null}}}bind(e,t,r){let i=this.handles.get(e);return i===void 0?"handle-unknown":r-i.lastSeen>=Dr?(this.forget(e,"expired"),"handle-expired"):i.peer!==t?"handle-foreign-peer":i}no(e,t,r,i){return{peer:e,h:t,frame:_(i===null?{k:"no",h:t,code:r}:t===null?{k:"no",q:i,code:r}:{k:"no",q:i,h:t,code:r})}}refuse(e,t=[]){return this.counters[e]=(this.counters[e]??0)+1,{out:t,refused:e,deferred:null}}};function Mr(n,e){let t=[];for(let r of Object.keys(e)){let i=e[r];if(Object.prototype.hasOwnProperty.call(n,r)&&Object.is(n[r],i))continue;let s=Object.prototype.hasOwnProperty.call(n,r)?n[r]:void 0,o=s===void 0?null:Js(r,s,i);if(o!==null){t.push(...o);continue}s!==void 0&&JSON.stringify(s)===JSON.stringify(i)||t.push({o:"r",p:[r],val:i})}for(let r of Object.keys(n))Object.prototype.hasOwnProperty.call(e,r)||t.push({o:"x",p:[r]});return t}var Bs=128;function Js(n,e,t){let r=a=>typeof a=="object"&&a!==null&&!Array.isArray(a);if(!r(e)||!r(t))return null;let i=[],s=Math.min(Bs,Math.max(1,Math.floor(Object.keys(t).length/2))),o=a=>U(a)<=Ge&&!["__proto__","constructor","prototype"].includes(a);for(let a of Object.keys(t)){let d=t[a];if(!(Object.prototype.hasOwnProperty.call(e,a)&&(Object.is(e[a],d)||JSON.stringify(e[a])===JSON.stringify(d)))&&(!o(a)||(i.push({o:"r",p:[n,a],val:d}),i.length>s)))return null}for(let a of Object.keys(e))if(!Object.prototype.hasOwnProperty.call(t,a)&&(!o(a)||(i.push({o:"x",p:[n,a]}),i.length>s)))return null;return i}function qr(n,e){let t;try{t=_(n)}catch{return null}return U(t)<=e?t:null}function Fs(n){return"q"in n&&typeof n.q=="string"?n.q:null}var Br=5e3,Wr=500;function $e(n){let e=/^\d+$/.test(n),t=/^(0x)?[0-9a-f]{1,16}$/i.test(n);try{if(e)return BigInt(n).toString(16).padStart(16,"0");if(t)return BigInt(n.startsWith("0x")?n:`0x${n}`).toString(16).padStart(16,"0")}catch{return null}return null}function On(n,e){let t=$e(n),r=$e(e);return t!==null&&t===r}var vn=new WeakMap,Ct=new WeakMap;function Vs(n){try{let e=JSON.parse(n);return e!==null&&typeof e=="object"&&e.k!=="join"&&typeof e.h=="string"?e.h:null}catch{return null}}var Jr=new WeakMap;function Ht(n){return Jr.get(n)}function Ur(n){let e=new Uint8Array(n);crypto.getRandomValues(e);let t="";for(let r of e)t+=r.toString(16).padStart(2,"0");return t}var $r=new TextEncoder,Ks=new TextDecoder;function xn(n){let e=n.streamId??`store/${n.definition.id}`,t=n.store??n.definition.id,r=vn.get(n.transport)??new Set;if(r.has(t))throw new h("invalid-data",`a store named ${t} is already hosted on this transport: name each store of one definition, or a join for that name is ambiguous`);r.add(t),vn.set(n.transport,r);let i=new It({definition:n.definition,store:t,authorize:n.authorize,project:n.project,projectFor:n.projectFor,onEvent:n.onEvent,areaOf:n.areaOf,warn:n.dev===!0?v=>console.warn(`[@net-mesh/browser] ${v}`):typeof n.dev=="function"?n.dev:void 0,actions:n.actions,inputs:n.inputs,maxEventBytes:n.maxEventBytes,now:n.now??(()=>Date.now()),newHandle:n.newHandle??(()=>Ur(16)),newIncarnation:n.newIncarnation??(()=>Ur(8)),canProject:n.canProject??(()=>!0)});if(n.definition.visibility!==void 0){let v=Te(Le(n.definition.visibility),n.initialState,null);try{n.definition.state(v)}catch(A){throw new h("invalid-data",`store '${n.definition.id}': the state validator rejects a view with secrets hidden \u2014 wrap each field a rule hides with hiddenOr(\u2026): ${A instanceof Error?A.message:String(A)}`,{cause:A})}}i.commit(n.initialState);let s=new Map,o=null,a=new Map,d={},c=!1,l=null;async function u(v){let A=s.get(v);if(A!==void 0)return A;let I=a.get(v);if(I!==void 0)return I;let F=Promise.resolve(n.transport.openStream({reliability:"reliable",peer:v,label:e})).then(g=>{if(a.delete(v),c){try{g.close()}catch{}throw new h("closed","the store closed while its stream was opening")}return s.set(v,g),g}).catch(g=>{throw a.delete(v),g});return a.set(v,F),F}async function p(v){for(let A of v){if(c)return;let I=$r.encode(A.frame),q=await u(A.peer);try{await q.send(I)}catch(F){if(c)return;if(!xt(F))throw F;if(s.get(A.peer)===q){s.delete(A.peer),a.delete(A.peer),d["reopened-stream"]=(d["reopened-stream"]??0)+1;try{q.close()}catch{}}await(await u(A.peer)).send(I)}}}function y(v){v.catch(()=>{d["send-failed"]=(d["send-failed"]??0)+1})}function f(v){y(p(v.out)),v.deferred!==null&&y(v.deferred.then(A=>f(A))),R()}let w=!1;function R(){if(!(w||c)){w=!0;try{let v=i.drainEvents();v.out.length>0&&y(p(v.out))}finally{w=!1}}}let P=Ct.get(n.transport)??new Set;P.add(i),Ct.set(n.transport,P);let M=n.transport.onEvent(v=>{if(v.type!=="stream_data")return;let A=v.peerNode;if(typeof A!="string"||A.length===0){d["no-authenticated-peer"]=(d["no-authenticated-peer"]??0)+1;return}let I=v.payload;if(I===void 0){d["no-payload"]=(d["no-payload"]??0)+1;return}let q=v.streamId;if(o!==null&&q!==void 0&&q!==o){d["foreign-stream"]=(d["foreign-stream"]??0)+1;return}let F;try{F=Ks.decode(I)}catch{d["undecodable-frame"]=(d["undecodable-frame"]??0)+1;return}let g=$e(A);if(g===null){d["unusable-peer"]=(d["unusable-peer"]??0)+1;return}let m=Ct.get(n.transport);if(m!==void 0&&m.size>1){let x=Vs(F);if(x!==null&&i.handle(x)===void 0){let C=!1;for(let W of m)W!==i&&W.handle(x)!==void 0&&(C=!0);if(C||m.values().next().value!==i){d["sibling-handle"]=(d["sibling-handle"]??0)+1;return}}}let b=i.receive(F,g);q!==void 0&&o===null&&b.refused===null&&(o=q),f(b)}),H=n.schedule??((v,A)=>{let I=setInterval(v,A);return()=>{clearInterval(I)}}),k=H(()=>{if(c)return;let v=(n.now??(()=>Date.now()))(),A=i.sweep(v);A.length>0&&y(p(A.filter(I=>s.has(I.peer)).map(I=>({peer:I.peer,h:I.h,frame:_({k:"no",h:I.h,code:"closed"})})))),f(i.resumeDeferred(v))},Br);async function E(){c=!0,k(),M();let v=i.farewell();await Promise.all(v.map(async A=>{let I=s.get(A.peer);if(I===void 0){d["farewell-unreachable"]=(d["farewell-unreachable"]??0)+1;return}try{await j(Promise.resolve(I.send($r.encode(A.frame))))}catch{d["farewell-failed"]=(d["farewell-failed"]??0)+1}}));for(let A of s.values())try{A.close()}catch{d["stream-close-failed"]=(d["stream-close-failed"]??0)+1}s.clear(),a.clear(),vn.get(n.transport)?.delete(t),Ct.get(n.transport)?.delete(i)}function j(v){return new Promise((A,I)=>{let q=()=>{m(),I(new h("timeout","the farewell did not flush before the deadline"))},F=H(q,Wr),g=setTimeout(q,Wr),m=()=>{F(),clearTimeout(g)};v.then(()=>{m(),A()},b=>{m(),I(b instanceof Error?b:new Error(String(b)))})})}let Y=n.transport.nodeIdHex()??i.incarnationHex,ee=new Set,ie={authority:Y,definition:n.definition,getState:()=>i.getState(),subscribe:v=>i.subscribe(v),setState:v=>{f(i.commit(v))},setEntities:(v,A)=>{f(i.commitEntities(v,A))},setEntity:(v,A,I)=>{let q={};Object.defineProperty(q,A,{value:I,enumerable:!0,writable:!0,configurable:!0}),f(i.commitEntities(v,q))},counts:()=>({handles:i.handleCount,ledgers:i.ledgerCount,deferred:i.deferredCount,sparseViews:i.sparseViews}),counters:()=>({...i.snapshotCounters(),...d}),close:()=>{if(l===null){l=E();for(let v of[...ee])v();ee.clear()}return l}};return Jr.set(ie,{owner:i,peer:$e(Y)??Y,maxEventBytes:n.maxEventBytes,dispatched:f,isClosed:()=>c,onClose:v=>{ee.add(v)}}),ie}var zs=3,Lt=class{constructor(e){this.deps=e;this.#d=[...e.audience],this.#a=e.interest===void 0?null:[...e.interest]}deps;#e="joining";#t=null;#s=null;#n=null;#r=null;#b=null;#l=0n;#o=null;#u=!1;#c=null;#f=null;#m=0;#h=0;#p=null;#d;#y=0;#O=new Rt;#w={};#a;get interest(){return this.#a===null?null:[...this.#a]}set interest(e){this.#a=e===null?null:[...e]}get desired(){return[...this.#d]}get waiters(){return this.#y}get state(){return this.#e}get handle(){return this.#t}get installed(){return this.#n===null?null:this.#n.toString()}get revision(){return this.#r===null?null:this.#r.toString()}get retired(){return this.#l.toString()}get skipped(){return this.#o===null?null:this.#o.toString()}get dropped(){return{...this.#w}}join(){if(this.#e==="closed")throw new h("closed","a closed replica cannot join again");this.#h+=1,this.#y=1,this.#E();let e=this.deps.newQ();return this.#c=e,this.#f=this.deps.now(),this.#m=0,this.#e="joining",this.deps.core.setStatus({phase:"connecting",stale:this.#v()}),{kind:"join",q:e,frame:_({k:"join",q:e,def:this.deps.definition.id,store:this.deps.store,ver:this.deps.definition.version,key:this.deps.key,aud:[...this.#d],...this.#a===null?{}:{int:[...this.#a]}})}}setAudience(e){if(this.#e==="closed")throw new h("closed","a closed replica cannot change audience");this.#h+=1;let t=[...e];if(this.#e==="installing"&&Gs(t,this.#d))return this.#y+=1,[];this.#d=t;let r=this.#t;if(this.#g(),this.#n=null,this.#r=null,this.#o=null,this.#u=!1,this.deps.core.applySnapshot(this.deps.definition.empty()),this.deps.core.setStatus({phase:"syncing",stale:!1,error:null}),r===null)return this.#y=1,[this.join()];let i=this.deps.newQ();return this.#c=i,this.#f=this.deps.now(),this.#y=1,this.#e="installing",[{kind:"aud",q:i,frame:_({k:"aud",q:i,h:r,aud:t})}]}reconnect(){if(this.#e==="closed")throw new h("closed","a closed replica cannot reconnect");this.#h+=1;let e=this.#t;if(this.#g(),e===null)return[this.join()];let t=this.deps.newQ();return this.#c=t,this.#e="installing",this.deps.core.setStatus({phase:"reconnecting",stale:this.#v()}),[{kind:"resume",q:t,frame:_({k:"resume",q:t,h:e,aud:[...this.#d],...this.#a===null?{}:{int:[...this.#a]}})}]}cancelWaiter(){this.#y>0&&(this.#y-=1),!(this.#y>0)&&this.#e==="installing"&&this.cancel()}receive(e){if(this.#e==="closed")return this.#i("closed");let t=Me(e,{maxBytes:this.deps.maxEventBytes,as:"replica"});if(!t.ok)return this.#i(t.reason);let r=t.message;if("h"in r&&r.h!==void 0&&this.#t!==null&&r.h!==this.#t)return this.#i("foreign-handle");switch(r.k){case"man":return this.#A(r);case"snap":return this.#R(r);case"delta":return this.#P(r);case"no":return this.#j(r.code,r.q);case"ok":case"res":return this.#i("unimplemented-kind")}}tick(){let e=this.deps.now();if(this.#e==="installing"&&this.#p!==null)return this.#p.expired(e)?this.#k("assembly-deadline"):[];if(this.#f===null||e-this.#f<yn)return[];if(this.#e!=="joining"&&this.#e!=="installing")return[];if(this.#m>=zs)return this.#f=null,this.#e="fenced",this.#c=null,this.#g(),this.#S("failed",new h("timeout",`no store named ${this.deps.store} answered the join`)),[];let t=this.#m,r=this.join();return this.#m=t+1,[r]}cancel(){this.#e!=="closed"&&(this.#h+=1,this.#g(),this.#c=null,this.#e="fenced",this.#o=null,this.#u=!1,this.#S("failed"))}#A(e){let t=le(e.g),r=e.q!==void 0&&e.q===this.#c;if(e.q!==void 0&&!r)return this.#i("stale-correlation");if(t<=this.#l)return this.#i("stale-generation");if(r){if(this.#e!=="joining"&&this.#e!=="installing"&&this.#e!=="fenced")return this.#i("unexpected-manifest")}else{if(this.#e==="fenced")return this.#i("fenced");if(this.#e!=="ready")return this.#o=this.#o===null?t:Xs(this.#o,t),this.#i("mid-transition")}if(this.#t===null)this.#t=e.h,this.#s=e.inc;else if(this.#s!==null&&e.inc!==this.#s)return this.#i("foreign-incarnation");this.#g(),this.#l=t;let i={h:e.h,g:e.g,r:e.r,n:e.n,bytes:e.bytes},s=this.#O.open(i,this.deps.now());return"accept"in s?(this.#b=t,this.#p=s,this.#e="installing",this.deps.core.setStatus({phase:"syncing",stale:this.#v()}),{out:[],dropped:null}):{out:this.#k(s.reason),dropped:s.reason}}#R(e){let t=this.#p;if(t===null)return this.#i("no-open-assembly");let r=this.#h,i=t.accept({h:e.h,g:e.g,r:e.r,n:e.n,i:e.i,d:e.d},s=>this.deps.definition.state(s),this.deps.now());return this.#h!==r?this.#i("superseded-installation"):i.ok?i.done?this.#_(i.document,e.g,e.r,r):{out:[],dropped:null}:i.fatal?{out:this.#k(i.reason),dropped:i.reason}:this.#i(i.reason)}#_(e,t,r,i){return this.deps.core.applySnapshot(e),this.#b=null,this.#p=null,this.#O.reclaim(this.#t,t),this.#h!==i?(this.#n=null,this.#r=null,this.#S("failed"),this.#i("superseded-installation")):(this.#n=le(t),this.#r=le(r),this.#c=null,this.#e="ready",this.deps.core.setStatus({phase:"ready",stale:!1,error:null}),{out:this.#I(),dropped:null})}#P(e){if(this.#e!=="ready")return this.#u=!0,this.#i("not-ready");let t=le(e.g),r=this.#n;if(r===null||t!==r)return r!==null&&t>r?{out:this.#x("generation-ahead"),dropped:"generation-ahead"}:this.#i("stale-generation");if(this.#r===null||le(e.base)!==this.#r)return{out:this.#x("gap"),dropped:"gap"};let i=this.deps.core.applyDelta(e.ops);return i.ok?(this.#r=le(e.r),{out:[],dropped:null}):{out:this.#x(i.reason),dropped:i.reason}}#j(e,t){if(e==="owner-lost")return this.#g(),this.#e="closed",this.#t=null,this.#S("closed"),{out:[],dropped:"owner-lost"};if(e==="closed"){let r=this.#e==="fenced";return this.#E(),r?(this.#S("failed"),{out:[],dropped:"closed-while-fenced"}):(this.#S("connecting"),{out:[this.join()],dropped:"closed"})}return t===void 0||t!==this.#c?this.#i("stale-correlation"):(this.#g(),this.#c=null,this.#e="fenced",this.#S("failed",new h(e,`the request was refused: ${e}`)),{out:[],dropped:`refused-${e}`})}#k(e){return this.#g(),this.#b=null,this.#e="installing",this.deps.core.setStatus({phase:"syncing",stale:this.#v()}),this.#x(e)}#x(e){let t=this.#t;if(t===null)return[];let r=this.deps.newQ();return this.#c=r,this.#f=this.deps.now(),this.#e="installing",this.#o=null,this.#u=!1,this.deps.core.setStatus({phase:this.#v()?"reconnecting":"syncing",stale:this.#v()}),[{kind:"resync",q:r,frame:_({k:"resync",q:r,h:t,g:this.#n===null?"0":this.#n.toString(),have:this.#r===null?"0":this.#r.toString()})}]}#I(){let e=this.#o,t=this.#u;return!t&&(e===null||this.#n===null||e<=this.#n)?(this.#o=null,this.#u=!1,[]):this.#x(t?"behind":"skipped-refresh")}#E(){this.#g(),this.#t=null,this.#s=null,this.#n=null,this.#r=null,this.#l=0n,this.#o=null,this.#u=!1,this.#c=null}#g(){this.#p!==null&&(this.#p.reclaim(),this.#p=null),this.#t!==null&&this.#O.reclaimHandle(this.#t),this.#b=null}#v(){return this.#n!==null}#S(e,t=null){this.#n=null,this.#r=null,this.deps.core.applySnapshot(this.deps.definition.empty()),this.deps.core.setStatus({phase:e,stale:!1,error:t})}#i(e){return this.#w[e]=(this.#w[e]??0)+1,{out:[],dropped:e}}};function Xs(n,e){return n>e?n:e}function Gs(n,e){return n.length===e.length&&n.every((t,r)=>t===e[r])}var Vr=2e4,kn=1e4,Ys=6e4,Qs=1e3,En=64,Fr=new TextEncoder,Zs=new TextDecoder;function Ye(n){let e=new Uint8Array(n);crypto.getRandomValues(e);let t="";for(let r of e)t+=r.toString(16).padStart(2,"0");return t}function An(n){let e=n.transport.nodeIdHex();if(e!==null&&On(e,n.host))throw new h("invalid-data","a replica cannot join the node it runs on: hold the hostStore handle instead");let t=n.streamId??`store/${n.definition.id}`,r=n.now??(()=>Date.now()),i=n.schedule??((g,m)=>{let b=setInterval(g,m);return()=>{clearInterval(b)}}),s=new he({definition:n.definition,initialState:n.definition.empty()}),o=new Lt({definition:n.definition,core:s,maxEventBytes:n.maxEventBytes,now:r,newQ:()=>(n.newQ??(()=>Ye(8)))(),audience:n.audience,store:n.store??n.definition.id,key:n.key,...n.interest===void 0?{}:{interest:n.interest}}),a=new Map,d=new Map,c=0n,l=!1,u=null,p=null,y=[],f=null;async function w(){if(u!==null)return u;if(p!==null)return p;let g=$e(n.host);return g===null?Promise.reject(new h("invalid-data",`the host id is not a node id: ${n.host}`)):(p=Promise.resolve(n.transport.connectPeer?.(g)).catch(()=>{}).then(()=>n.transport.openStream({reliability:"reliable",peer:g,label:t})).then(m=>{if(p=null,l){try{m.close()}catch{}throw new h("closed","the store closed while its stream was opening")}return u=m,m}).catch(m=>{throw p=null,m}),p)}async function R(g){for(let m of g){if(l)return;let b=Fr.encode(m),x=await w();try{await x.send(b)}catch(C){if(l)return;if(!xt(C))throw C;if(u===x){u=null,p=null;try{x.close()}catch{}}await(await w()).send(b)}}}function P(g){let m=g instanceof h?g:new h("indeterminate",`the transport could not carry a store frame: ${String(g)}`);for(let b of y.splice(0,y.length))b.reject(m);E(m);for(let[b,x]of[...a])a.delete(b),x.reject(m)}function M(g){R(g).catch(P)}let H=g=>g.map(m=>m.frame);function k(g){if(o.state==="ready"){E(null);for(let b of y.splice(0,y.length))b.resolve();return}if(o.state!=="fenced"&&o.state!=="closed")return;let m=g??new h(o.state==="closed"?"owner-lost":"aborted",`the store handle is ${o.state}`);E(m);for(let b of y.splice(0,y.length))b.reject(m)}function E(g){let m=f;if(m!==null){f=null,m.q!==null&&a.delete(m.q);for(let b of[...m.calls])m.calls.delete(b),g===null?b.resolve():b.reject(g)}}function j(g){return E(new h("aborted","a newer transition superseded this one before it installed")),f={q:g,calls:new Set},g===null?null:a.size>=En?new h("capacity","too many requests are already outstanding"):(a.set(g,{resolve:()=>E(null),reject:m=>E(m),at:r(),transition:!0}),null)}function Y(){return new Promise((g,m)=>{let b={resolve:g,reject:m,deadlineAt:r()+Ys},x=f??{q:null,calls:new Set};f=x,x.calls.add(b)})}let ee=n.transport.onEvent(g=>{if(l||g.type!=="stream_data"||typeof g.peerNode!="string"||!On(g.peerNode,n.host))return;let m=g.payload;if(m===void 0)return;let b=Zs.decode(m),x=Me(b,{maxBytes:n.maxEventBytes,as:"replica"});if(x.ok&&"q"in x.message&&typeof x.message.q=="string"){let K=a.get(x.message.q);if(K!==void 0&&(x.message.k==="res"||x.message.k==="ok")){a.delete(x.message.q),K.resolve(x.message.k==="res"?x.message.out:void 0);return}K!==void 0&&x.message.k==="no"&&(a.delete(x.message.q),K.reject(new h(x.message.code,`the store refused: ${x.message.code}`)))}let C=null;x.ok&&x.message.k==="no"&&(C=new h(x.message.code,`the store refused: ${x.message.code}`));let W=o.receive(b);M(H(W.out)),k(C)}),ie=i(()=>{if(l)return;let g=o.handle;g!==null&&M([_({k:"alive",q:Ye(8),h:g})])},Vr),v=i(()=>{if(l)return;let g=r(),m=f;if(m!==null){for(let b of[...m.calls])g<b.deadlineAt||(m.calls.delete(b),o.cancelWaiter(),b.reject(new h("indeterminate","the transition did not install before its deadline")));m.q!==null&&m.calls.size===0&&E(null)}for(let[b,x]of[...a])x.transition||g-x.at<kn||(a.delete(b),x.reject(new h("indeterminate","the store did not answer before the deadline")))},kn),A=i(()=>{l||(M(H(o.tick())),k(s.getStatus().error??null))},Qs),I;try{I=o.join()}catch(g){throw new h("invalid-data","the join request cannot be encoded",{cause:g})}j(null),M(H([I]));function q(g){return a.size>=En?Promise.reject(new h("capacity","too many requests are already outstanding")):new Promise((m,b)=>{a.set(g,{resolve:x=>{m(x)},reject:b,at:r(),transition:!1})})}let F={getState:()=>s.getState(),subscribe:g=>s.subscribe(g),getStatus:()=>s.getStatus(),subscribeStatus:g=>s.subscribeStatus(g),ready:()=>new Promise((g,m)=>{if(l){m(new h("closed","this store handle is closed"));return}if(o.state==="ready"){g();return}if(o.state==="closed"){m(new h("owner-lost","the store owner closed this handle"));return}y.push({resolve:g,reject:m})}),act:async(g,m)=>{if(l)throw new h("closed","this store handle is closed");if(o.state==="closed")throw new h("owner-lost","the store owner closed this handle");let b=o.handle;if(b===null)throw new h("not-ready","no handle yet: the join has not been answered");c+=1n;let x=(n.newQ??(()=>Ye(8)))(),C;try{C=_({k:"act",q:x,h:b,s:c.toString(),name:g,in:m})}catch(K){throw new h("invalid-data",`the input for '${g}' cannot be encoded`,{cause:K})}let W=q(x);return W.catch(()=>{}),await R([C]),await W},input:(g,m)=>{if(l)return{type:"dropped",reason:"not-ready"};let b=o.handle;if(b===null||o.state!=="ready")return{type:"dropped",reason:"not-ready"};let x=(d.get(g)??0n)+1n;d.set(g,x);let C;try{C=_({k:"in",h:b,s:x.toString(),name:g,in:m})}catch(W){throw new h("invalid-data",`the input for '${g}' cannot be encoded`,{cause:W})}return M([C]),{type:x===1n?"queued":"replaced"}},setAudience:async g=>{if(l)throw new h("closed","this store handle is closed");let m;try{m=o.setAudience(g)}catch(C){throw new h("invalid-data","the audience cannot be encoded",{cause:C})}let b=m[0];if(b!==void 0){let C=j(b.q);if(C!==null)throw C}let x=Y();x.catch(()=>{}),b!==void 0&&await R(H(m)),await x},setInterest:async g=>{if(l)throw new h("closed","this store handle is closed");let m=[...g],b="0".repeat(32),x;try{x=_({k:"int",q:"0".repeat(16),h:b,int:m})}catch(Be){throw new h("invalid-data","the interest set cannot be encoded",{cause:Be})}if(U(x)>n.maxEventBytes)throw new h("capacity","the interest set does not fit one message");o.interest=m;let C=o.handle;if(C===null||o.state!=="ready")return await F.ready(),o.interest===null||o.interest.join("\0")!==m.join("\0")?void 0:F.setInterest(m);let W=(n.newQ??(()=>Ye(8)))(),K=q(W);K.catch(()=>{}),await R([_({k:"int",q:W,h:C,int:m})]),await K},reconnect:async()=>{if(l)throw new h("closed","this store handle is closed");u=null,p=null;let g;try{g=o.reconnect()}catch(m){throw new h("invalid-data","the reconnect request cannot be encoded",{cause:m})}g[0]!==void 0&&j(null),await R(H(g))},close:async()=>{if(l)return;l=!0,ie(),v(),A();let g=o.handle;if(g!==null)try{await(await w()).send(Fr.encode(_({k:"leave",q:Ye(8),h:g})))}catch{}ee(),E(new h("aborted","the store handle closed before this request was answered"));for(let m of a.values())m.reject(new h("aborted","the store handle closed before this request was answered"));a.clear();for(let m of y.splice(0,y.length))m.reject(new h("closed","the store handle closed before a view was installed"));u?.close(),u=null,s.close()}};return F}var zr="0".repeat(16),Rn="0".repeat(32);function Kr(n,e,t){let r;try{r=t==="act"?_({k:"act",q:zr,h:Rn,s:"1",name:n,in:e}):_({k:"in",h:Rn,s:"1",name:n,in:e})}catch(s){throw new h("invalid-data",`the input for '${n}' cannot be encoded`,{cause:s})}let i=De(r);if(!i.ok||typeof i.value!="object"||i.value===null||Array.isArray(i.value))throw new h("invalid-data",`the input for '${n}' cannot be encoded`);return i.value.in}function eo(n){let e=De(JSON.stringify(n));return e.ok?e.value:n}function _n(n,e){let t=Ht(n);if(t===void 0)throw new h("invalid-data","hostPlayer needs a handle returned by hostStore");let{owner:r,peer:i}=t,s=n.definition,o=new he({definition:s,initialState:s.empty(),phase:"syncing"}),a=[...e.audience],d=e.interest===void 0?null:[...e.interest],c=!1,l=!1,u=new Map;function p(k,E){l=!0,E?.code==="forbidden"&&queueMicrotask(()=>R("refused")),o.applySnapshot(s.empty()),o.setStatus({phase:k,stale:!1,error:E})}function y(){if(c||l)return;if(t.isClosed()){p("closed",null);return}if(!r.localRead(i,a)){p("failed",new h("forbidden","the store refused: forbidden"));return}let k=r.localView(i,a,d);if(k===null){p("failed",new h("capacity","the store refused: capacity"));return}o.applySnapshot(k),o.setStatus({phase:"ready",stale:!1,error:null})}let f=r.subscribe(()=>{y()});t.onClose(()=>{f(),!c&&!l&&p("closed",null)}),y();let w=!1;o.getStatus().phase==="ready"&&(w=!0,r.localPresence(i,!0,a),t.dispatched({out:[],refused:null,deferred:null}));function R(k){!w||t.isClosed()||(w=!1,r.localPresence(i,!1,a,k),t.dispatched({out:[],refused:null,deferred:null}))}function P(){return c?new h("closed","this store handle is closed"):t.isClosed()?new h("owner-lost","the store owner closed this handle"):l?o.getStatus().error??new h("owner-lost","the store owner closed this handle"):null}function M(){let k=[...u];if(u.clear(),P()===null)for(let[E,j]of k)t.dispatched(r.localInput(E,j,i))}function H(k,E,j){return E===void 0?o.subscribe(k):o.subscribe(k,E,j)}return{getState:()=>o.getState(),subscribe:H,getStatus:()=>o.getStatus(),subscribeStatus:k=>o.subscribeStatus(k),ready:()=>{let k=o.getStatus();return k.phase==="ready"?Promise.resolve():Promise.reject(k.error??new h(c?"closed":"owner-lost","this store handle is not ready"))},act:async(k,E)=>{let j=P();if(j!==null)throw j;let Y=Kr(k,E,"act");await Promise.resolve();let ee=P();if(ee!==null)throw ee;let{outcome:ie,dispatched:v}=r.localAct(k,Y,i);if(t.dispatched(v),ie.kind==="refusal")throw new h(ie.code,`the store refused: ${ie.code}`);return eo(ie.out)},input:(k,E)=>{if(P()!==null||o.getStatus().phase!=="ready")return{type:"dropped",reason:"not-ready"};let j=Kr(k,E,"in"),Y=u.size===0,ee=u.has(k);return u.set(k,j),Y&&queueMicrotask(M),{type:ee?"replaced":"queued"}},setAudience:async k=>{let E=P();if(E!==null)throw E;try{_({k:"aud",q:zr,h:Rn,aud:[...k]})}catch(Y){throw new h("invalid-data","the audience cannot be encoded",{cause:Y})}await Promise.resolve();let j=P();if(j!==null)throw j;if(!r.localRead(i,k))throw new h("forbidden","the store refused: forbidden");a=[...k],y()},setInterest:async k=>{let E=P();if(E!==null)throw E;let j=[...k];await Promise.resolve(),d=j,y()},reconnect:()=>Promise.resolve(),close:()=>(c||(c=!0,R("left"),u.clear(),f(),o.close()),Promise.resolve())}}var ue=class extends Error{constructor(t,r){super(r);this.code=t;this.name="InventoryError"}code},Pn=64,jn=Object.freeze({});function to(){return jn}function Xr(n){if(typeof n!="string"||n.length===0||n.length>Pn||n==="__proto__")throw new ue("invalid",`an item id is 1-${Pn} characters, got ${JSON.stringify(n)}`)}function Gr(n){if(!Number.isSafeInteger(n)||n<1)throw new ue("invalid",`a count is a whole number of at least 1, got ${String(n)}`)}function no(n,e){let t=e?.maxCount;return t===void 0?Number.MAX_SAFE_INTEGER:typeof t=="number"?t:Object.prototype.hasOwnProperty.call(t,n)?t[n]:Number.MAX_SAFE_INTEGER}function Tt(n,e){return n===void 0||!Object.prototype.hasOwnProperty.call(n,e)?0:n[e]??0}function ro(n,e,t=1){return Tt(n,e)>=t}function Yr(n,e,t,r){Xr(e),Gr(t);let i=Tt(n,e),s=i+t;if(!Number.isSafeInteger(s)||s>no(e,r))throw new ue("full",`no room for ${String(t)} more ${e}`);if(i===0&&r?.maxKinds!==void 0&&Object.keys(n).length>=r.maxKinds)throw new ue("full",`no room for another kind of item (${String(r.maxKinds)} at most)`);return Object.freeze({...n,[e]:s})}function io(n,e,t){Xr(e),Gr(t);let r=Tt(n,e);if(r<t)throw new ue("insufficient",`has ${String(r)} ${e}, needs ${String(t)}`);let i={...n};return r===t?delete i[e]:i[e]=r-t,Object.freeze(i)}function so(n,e){if(typeof n!="object"||n===null||Array.isArray(n))throw new ue("invalid","an inventory is an object of item id \u2192 count");let t=jn;for(let[r,i]of Object.entries(n)){if(typeof i!="number")throw new ue("invalid",`the count of ${r} is not a number`);t=Yr(t,r,i,e)}return t}function oo(n,e){return Object.prototype.hasOwnProperty.call(n,e)?n[e]:jn}function ao(n,e){return Object.prototype.hasOwnProperty.call(n,e)?{[e]:n[e]}:{}}function Qr(n){if(!(n>0)||!Number.isFinite(n))throw new RangeError(`a cell size is a positive number, got ${String(n)}`)}function lo(n,e,t){return Qr(t),`${String(Math.floor(n/t))}:${String(Math.floor(e/t))}`}function co(n){let e=/^(-?\d+):(-?\d+)$/.exec(n);return e===null?null:[Number(e[1]),Number(e[2])]}function Zr(n,e,t){Qr(t.size);let r=t.radius??1,i=Math.floor(n/t.size),s=Math.floor(e/t.size),o=[`${String(i)}:${String(s)}`];for(let a=-r;a<=r;a+=1)for(let d=-r;d<=r;d+=1)(a!==0||d!==0)&&o.push(`${String(i+a)}:${String(s+d)}`);return o}function uo(n,e,t,r){let i=Zr(e,t,r),o=(r.radius??1)+(r.margin??1),a=Math.floor(e/r.size),d=Math.floor(t/r.size),c=new Set(i);for(let l of n){if(c.has(l))continue;let u=co(l);u!==null&&Math.abs(u[0]-a)<=o&&Math.abs(u[1]-d)<=o&&(i.push(l),c.add(l))}return i}function po(n,e){if(n.length!==e.length)return!1;let t=new Set(n);return e.every(r=>t.has(r))}var J=class extends Error{constructor(t,r){super(r);this.code=t;this.name="LobbyError"}code},ei=64,ti=256,In=512,ni=256,Dt="ABCDEFGHJKMNPQRSTUVWXYZ23456789",Cn=6,ii=2e3,si=8104,fo=/^[a-z0-9][a-z0-9._-]{0,63}$/,oi=1,Qe=new TextEncoder,ho=new TextDecoder;function Hn(n){if(!fo.test(n))throw new J("invalid",`a game name is 1-64 of a-z 0-9 . _ - (starting with a letter or digit), got ${JSON.stringify(n)}`)}function Ln(n){let e=n.toUpperCase().replace(/[\s-]/g,"");if(e.length!==Cn||[...e].some(t=>!Dt.includes(t)))throw new J("invalid",`not a lobby code: ${JSON.stringify(n)}`);return e}function yo(){let n=256-256%Dt.length,e="";for(;e.length<Cn;){let t=new Uint8Array(16);crypto.getRandomValues(t);for(let r of t)r<n&&e.length<Cn&&(e+=Dt[r%Dt.length])}return e}function go(n,e){return`net-lobby:${n}:seek:${e}`}function ai(n){return`net-lobby:${n}`}function Tn(n){return`net-lobby:${n}:rec:`}async function li(n,e){let t=new Uint8Array(await crypto.subtle.digest("SHA-256",Qe.encode(`net-lobby${n}${e}`))),r="";for(let i of t.subarray(0,16))r+=i.toString(16).padStart(2,"0");return`net-lobby:${n}:code:${r}`}function mo(n){let e="";for(let t of n)e+=String.fromCharCode(t);return btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function bo(n){if(!/^[A-Za-z0-9_-]*$/.test(n))return null;try{let e=atob(n.replace(/-/g,"+").replace(/_/g,"/"));return Uint8Array.from(e,t=>t.charCodeAt(0))}catch{return null}}function ci(n){if(typeof n!="object"||n===null||Array.isArray(n))throw new J("invalid","lobby info is a flat object of strings, numbers and booleans");let e={};for(let[t,r]of Object.entries(n)){if(typeof r=="number"?!Number.isFinite(r):typeof r!="string"&&typeof r!="boolean")throw new J("invalid",`lobby info.${t} must be a string, a finite number or a boolean`);e[t]=r}if(Qe.encode(JSON.stringify(e)).length>ti)throw new J("invalid",`lobby info is over ${ti} bytes of JSON`);return Object.freeze(e)}function di(n){if(typeof n!="string"||n.trim().length===0||[...n].length>ei)throw new J("invalid",`a lobby name is 1-${ei} characters`);return n}function ui(n){if(typeof n!="number"||!Number.isInteger(n)||n<1||n>ni)throw new J("invalid",`capacity is a whole number from 1 to ${ni}`);return n}function ri(n,e){let t=JSON.stringify({v:oi,c:e.code,n:e.name,p:e.players,m:e.capacity,s:e.store,i:e.info}),r=Tn(n)+mo(Qe.encode(t));if(Qe.encode(r).length>In)throw new J("invalid",`the lobby record is over ${In} bytes: shorten the name or info`);return r}function So(n,e){if(Qe.encode(e).length>In)return null;let t=bo(e.slice(Tn(n).length));if(t===null)return null;let r;try{r=JSON.parse(ho.decode(t))}catch{return null}if(typeof r!="object"||r===null)return null;let i=r;try{if(i.v!==oi||typeof i.c!="string"||typeof i.s!="string"||i.s.length>200)return null;let s=ui(i.m),o=i.p;return typeof o!="number"||!Number.isInteger(o)||o<0||o>s?null:{code:Ln(i.c),name:di(i.n),players:o,capacity:s,store:i.s,info:ci(i.i??{})}}catch{return null}}function Mt(n){let e=n.startsWith("0x")?n.slice(2):n;if(/^[0-9a-fA-F]{1,16}$/.test(e))return e.toLowerCase().padStart(16,"0");throw new J("invalid",`not a peer id: ${JSON.stringify(n)}`)}async function Ll(n){let{node:e,game:t}=n;Hn(t);let r=di(n.name),i=ui(n.capacity),s=ci(n.info??{}),o=n.visibility??"public",a=yo(),d=`${n.definition.id}@${n.definition.version}`,c=await li(t,a);ri(t,{code:a,name:r,players:i,capacity:i,store:d,info:s});let l=e.nodeIdHex();if(l===null)throw new J("invalid","the node has no id yet: connect it before opening a lobby");let u=Mt(l),p=new Set,y=n.authorize??(()=>!0),f=()=>[],w=N=>{let te=N.peer;return p.has(te)||N.type==="read"&&te!==u&&!f().includes(te)&&1+f().filter(Si=>Si!==u).length>=i?!1:y(N)},{audience:R,tags:P,announceEveryMs:M,maxEventBytes:H}=n,{node:k,game:E,name:j,capacity:Y,visibility:ee,info:ie,audience:v,tags:A,announceEveryMs:I,maxEventBytes:q,authorize:F,...g}=n,m=xn({...g,transport:e,maxEventBytes:H??si,authorize:w}),b=Ht(m);f=()=>b.owner.peers();let x=_n(m,{audience:R??[]});function C(){return[u,...b.owner.peers().filter(N=>N!==u)]}let W=new Set,K=!1,Be=null,qt=!1;function gi(){let N=[...P??[],c];return o==="public"&&N.push(ai(t),ri(t,{code:a,name:r,players:C().length,capacity:i,store:d,info:s})),N}function Ze(){if(!K){if(Be!==null){qt=!0;return}Be=e.announce(gi()).catch(()=>{}).finally(()=>{Be=null,qt&&(qt=!1,Ze())})}}let Dn=C().join(),mi=b.owner.onMembership(()=>{queueMicrotask(()=>{if(K)return;let N=C();if(N.join()!==Dn){Dn=N.join(),Ze();for(let te of[...W])try{te(N)}catch{}}})});Ze();let bi=setInterval(Ze,M??ii);return{code:a,game:t,visibility:o,host:m,self:x,players:C,subscribePlayers:N=>(W.add(N),()=>{W.delete(N)}),link:N=>{let te=new URL(N??globalThis.location?.href??"about:blank");return te.searchParams.set("lobby",a),te.toString()},kick:N=>{let te=Mt(N);if(te===u)throw new J("invalid","the host cannot kick itself; close the lobby instead");p.add(te),b.dispatched(b.owner.reauthorize())},close:async()=>{K||(K=!0,clearInterval(bi),mi(),W.clear(),await x.close(),await m.close(),await e.announce([...P??[]]).catch(()=>{}))}}}async function Tl(n){Hn(n.game);let e=Tn(n.game),t=[],r=new Set;for(let i of await n.node.query(ai(n.game))){if(r.has(i.peerIdHex))continue;let s=i.capabilities.find(a=>a.startsWith(e));if(s===void 0)continue;let o=So(n.game,s);o!==null&&(r.add(i.peerIdHex),t.push({...o,host:i.peerIdHex}))}return t}async function Dl(n){Hn(n.game);let e;if(n.lobby!==void 0)e=Mt(n.lobby.host);else if(n.code!==void 0){let p=await li(n.game,Ln(n.code)),y=Date.now()+(n.timeoutMs??2e4),f=[];for(;f=[...new Set((await n.node.query(p)).map(w=>w.peerIdHex))],!(f.length>0||Date.now()>=y);)await new Promise(w=>setTimeout(w,250));if(f.length===0)throw new J("not-found",`no lobby answered to code ${n.code}`);if(f.length>1)throw new J("ambiguous",`${f.length} nodes claim code ${n.code}; join from the list instead`);e=f[0]}else throw new J("invalid","joinLobby needs a code or a lobby");let t=n.node.nodeIdHex();if(t!==null&&Mt(t)===e)throw new h("invalid-data","this node hosts that lobby: use lobby.self to play in it");let r=n.node,i=[...n.tags??[]],s=[...i,go(n.game,e)],o=!1,a=()=>{o||r.announce(s).catch(()=>{})};a();let d=setInterval(a,ii),c=()=>{o||(o=!0,clearInterval(d),r.announce(i).catch(()=>{}))};if(r.connectPeer!==void 0){let p=Date.now()+(n.timeoutMs??2e4);for(;;)try{await r.connectPeer(e);break}catch(y){if(Date.now()>=p)throw c(),new J("not-found",`could not reach the lobby's host ${e}: ${String(y?.message??y)}`);await new Promise(f=>setTimeout(f,500))}}let l;try{l=An({definition:n.definition,transport:r,host:e,audience:n.audience??[],key:n.key??"player",maxEventBytes:n.maxEventBytes??si,...n.interest===void 0?{}:{interest:n.interest}})}catch(p){throw c(),p}let u=l.close.bind(l);return l.close=async()=>{c(),await u()},l}function Ml(n){try{let e=new URL(n??globalThis.location?.href??"").searchParams.get("lobby");return e===null?null:Ln(e)}catch{return null}}var hi="net-mesh:identity";function pi(n){let e=new Uint8Array(n);return globalThis.crypto.getRandomValues(e),Array.from(e,t=>t.toString(16).padStart(2,"0")).join("")}var fi=/^[0-9a-f]{64}$/;function wo(n){if(n===null)return null;try{let e=JSON.parse(n);if(typeof e.entitySecretHex=="string"&&typeof e.noiseSecretHex=="string"&&fi.test(e.entitySecretHex)&&fi.test(e.noiseSecretHex))return{entitySecretHex:e.entitySecretHex,noiseSecretHex:e.noiseSecretHex}}catch{}return null}function vo(n=hi,e){let t=e;try{t??=globalThis.localStorage}catch{t=void 0}let r=null;try{r=wo(t?.getItem(n)??null)}catch{t=void 0}if(r!==null)return r;let i={entitySecretHex:pi(32),noiseSecretHex:pi(32)};try{t?.setItem(n,JSON.stringify(i))}catch{}return i}var qe=class extends Error{constructor(t,r,i=null){super(r);this.kind=t;this.status=i}kind;status;name="CredentialRequestError"},yi={unknown_game:"unknown-game",rate_limited:"rate-limited",malformed_request:"malformed-request"};async function Oo(n){let e=n.fetch??globalThis.fetch;if(typeof e!="function")throw new qe("unreachable","requestCredential needs fetch");let t=`${n.anchorUrl.replace(/\/+$/,"")}/credential`,r;try{r=await e(t,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({game:n.game}),...n.signal===void 0?{}:{signal:n.signal}})}catch(o){throw n.signal?.aborted?o:new qe("unreachable",`could not reach ${t}: ${String(o)}`)}let i=null;try{i=await r.json()}catch{}if(!r.ok){let o=i?.refusal,a=i?.message,d=typeof o=="string"&&o in yi?yi[o]:r.status===404?"unreachable":"unexpected",c=d==="unreachable"?`${t} issues no credentials (is the anchor started with --game?)`:typeof a=="string"?a:`the anchor answered ${r.status}`;throw new qe(d,c,r.status)}let s=i;if(typeof s?.credentialB64!="string"||typeof s.bootstrapUrl!="string"||typeof s.game!="string")throw new qe("unexpected","the anchor answered without a credential",r.status);return{credentialB64:s.credentialB64,bootstrapUrl:s.bootstrapUrl,game:s.game}}export{Vr as ALIVE_INTERVAL_MS,we as AsyncQueue,bt as BrowserNode,tt as ControlPlaneError,qe as CredentialRequestError,hi as DEFAULT_IDENTITY_KEY,Ae as EventHub,kt as HIDDEN,Br as HOST_SWEEP_MS,nt as IceServerConflictError,ge as IdentityError,ue as InventoryError,ii as LOBBY_ANNOUNCE_MS,Dt as LOBBY_CODE_ALPHABET,Cn as LOBBY_CODE_LENGTH,z as LeafError,je as LeafStream,J as LobbyError,Nr as MAX_EVENT_ROUNDS,hr as MAX_INTEREST_KEYS,yr as MAX_INTEREST_KEY_BYTES,Pn as MAX_ITEM_ID_CHARS,ni as MAX_LOBBY_CAPACITY,ti as MAX_LOBBY_INFO_BYTES,ei as MAX_LOBBY_NAME_CHARS,In as MAX_LOBBY_RECORD_TAG_BYTES,En as MAX_OUTSTANDING,Ot as MeshSession,rt as NotLeaderError,at as ORG_SINK_CLOSED_REFUSAL,pe as OrgAdmissionDeniedError,D as OrgCancelledError,Pe as OrgDuplex,Re as OrgHandleRegistry,Je as OrgIndeterminateError,ve as OrgInternalError,Z as OrgLeaderLostError,We as OrgMalformedError,Fe as OrgRefusedError,Ke as OrgRequests,xe as OrgRevokedError,X as OrgServe,Ee as OrgSessionLostError,Ve as OrgSink,be as OrgStream,Q as OrgStreamError,ke as OrgTimeoutError,_e as OrgUpload,kn as REQUEST_DEADLINE_MS,it as RpcError,oe as RtcError,Oe as SessionError,he as StoreCore,h as StoreError,Jn as U64_EVENT_KEYS,Ne as UnknownLeafError,et as WireError,Yr as addItems,tn as asSessionModule,rs as assertHidden,St as buildConnectRequest,Kt as candidateLineIsReflexive,lo as cellKey,Zr as cellsAround,Ni as classifyRtcError,Zn as classifyRtcFailure,gt as classifyRtcFailureAll,st as coarseAdmissionReason,Vi as connect,Tt as countItems,Ll as createLobby,is as defineStore,tr as diagnosticStunUrl,to as emptyInventory,Fn as fromBase64,S as fromWasmError,ro as hasItems,Zi as hiddenOr,_n as hostPlayer,xn as hostStore,oo as inventoryOf,Et as isHidden,en as isLifecycleEvent,Ri as isUdpBlocked,Dl as joinLobby,An as joinStore,Tl as listLobbies,Xe as loadLeafWasm,Ml as lobbyCodeFromUrl,_t as mergeShallow,Ln as normalizeLobbyCode,ao as onlyOwn,Qi as openSession,vi as orgRetireError,lt as orgRetireReason,Nt as orgTerminalError,Ce as parseAttemptStatus,wt as parseCounters,vt as parseDescriptors,me as parseEvent,so as parseInventory,ct as parseJsonPreservingU64,Wn as parseLeafError,ze as parseOrgCaller,qn as parseOrgError,or as parseRetryReport,$n as parseRpcFailure,Un as parseRtcFailure,sr as parseRtcStats,Zt as parseSessionEvent,ir as peerIdHex,Gt as probeBootstrapReachable,zt as probeEventAnswers,er as probeStunBinding,Xt as probeStunBindings,ur as projectVisible,ce as reconcile,Qt as refineIceFailure,nr as reflexiveAddress,vo as rememberedIdentity,io as removeItems,Oo as requestCredential,po as sameCells,uo as stickyCells,qi as stunProbeAnswered,Qn as stunProbeVerdict,Bt as toBase64,ne as toWasmOrgCallOptions,re as toWasmOrgServeOptions,ot as udpBlockedEvidence};
|