@liascript/exporter
Version:
A generic exporter for LiaScript
1 lines • 20.9 kB
JavaScript
!function(e,t,n,r,a){var o="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},s="function"==typeof o[r]&&o[r],i=s.cache||{},c="undefined"!=typeof module&&"function"==typeof module.require&&module.require.bind(module);function f(t,n){if(!i[t]){if(!e[t]){var a="function"==typeof o[r]&&o[r];if(!n&&a)return a(t,!0);if(s)return s(t,!0);if(c&&"string"==typeof t)return c(t);var l=new Error("Cannot find module '"+t+"'");throw l.code="MODULE_NOT_FOUND",l}u.resolve=function(n){var r=e[t][1][n];return null!=r?r:n},u.cache={};var d=i[t]=new f.Module(t);e[t][0].call(d.exports,u,d,d.exports,this)}return i[t].exports;function u(e){var t=u.resolve(e);return!1===t?{}:f(t)}}f.isParcelRequire=!0,f.Module=function(e){this.id=e,this.bundle=f,this.exports={}},f.modules=e,f.cache=i,f.parent=s,f.register=function(t,n){e[t]=[function(e,t){t.exports=n},{}]},Object.defineProperty(f,"root",{get:function(){return o[r]}}),o[r]=f;for(var l=0;l<t.length;l++)f(t[l])}({bQe85:[function(e,t,n){var r=e("@parcel/transformer-js/src/esmodule-helpers.js");r.defineInteropFlag(n),r.export(n,"createEvent",(()=>dt)),r.export(n,"defaultRelayUrls",(()=>gt)),r.export(n,"getRelaySockets",(()=>mt)),r.export(n,"joinRoom",(()=>pt)),r.export(n,"pauseRelayReconnection",(()=>Ke)),r.export(n,"resumeRelayReconnection",(()=>qe)),r.export(n,"selfId",(()=>we)),r.export(n,"subscribe",(()=>ut));const a={p:0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2fn,n:0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141n,h:1n,a:0n,b:7n,Gx:0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798n,Gy:0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8n},{p:o,n:s,Gx:i,Gy:c,b:f}=a,l=32,d={publicKey:33,publicKeyUncompressed:65,seed:48},u=(e="")=>{const t=Error(e);throw((...e)=>{"captureStackTrace"in Error&&"function"==typeof Error.captureStackTrace&&Error.captureStackTrace(...e)})(t,u),t},y=(e,t,n="")=>{const r=(a=e)instanceof Uint8Array||ArrayBuffer.isView(a)&&"Uint8Array"===a.constructor.name;var a;const o=e?.length,s=void 0!==t;return(!r||s&&o!==t)&&u((n&&`"${n}" `)+"expected Uint8Array"+(s?" of length "+t:"")+", got "+(r?"length="+o:"type="+typeof e)),e},p=e=>new Uint8Array(e),m=(e,t)=>e.toString(16).padStart(t,"0"),h=e=>Array.from(y(e)).map((e=>m(e,2))).join(""),g=e=>e>=48&&e<=57?e-48:e>=65&&e<=70?e-55:e>=97&&e<=102?e-87:void 0,w=e=>{const t="hex invalid";if("string"!=typeof e)return u(t);const n=e.length,r=n/2;if(n%2)return u(t);const a=p(r);for(let n=0,o=0;n<r;n++,o+=2){const r=g(e.charCodeAt(o)),s=g(e.charCodeAt(o+1));if(void 0===r||void 0===s)return u(t);a[n]=16*r+s}return a},b=()=>globalThis?.crypto,v=()=>b()?.subtle??u("crypto.subtle must be defined, consider polyfill"),A=(...e)=>{const t=p(e.reduce(((e,t)=>e+y(t).length),0));let n=0;return e.forEach((e=>{t.set(e,n),n+=e.length})),t},k=(e=l)=>b().getRandomValues(p(e)),x=BigInt,P=(e,t,n,r="bad number: out of range")=>(e=>"bigint"==typeof e)(e)&&t<=e&&e<n?e:u(r),T=(e,t=o)=>{const n=e%t;return n>=0n?n:t+n},S=e=>T(e,s),E=e=>e instanceof O?e:u("Point expected"),U=e=>T(T(e*e)*e+f),C=e=>P(e,0n,o),L=e=>P(e,1n,o),D=e=>0n===(1n&e),R=e=>Uint8Array.of(e),I=e=>{const t=U(L(e));let n=1n;for(let e=t,r=(o+1n)/4n;r>0n;r>>=1n)1n&r&&(n=n*e%o),e=e*e%o;return T(n*n)===t?n:u("sqrt invalid")};class O{static BASE;static ZERO;X;Y;Z;constructor(e,t,n){this.X=C(e),this.Y=L(t),this.Z=C(n),Object.freeze(this)}static CURVE(){return a}static fromAffine(e){const{x:t,y:n}=e;return 0n===t&&0n===n?j:new O(t,n,1n)}static fromBytes(e){y(e);const{publicKey:t,publicKeyUncompressed:n}=d;let r;const a=e.length,o=e[0],s=e.subarray(1),i=K(s,0,l);if(a===t&&(2===o||3===o)){let e=I(i);const t=D(e);D(x(o))!==t&&(e=T(-e)),r=new O(i,e,1n)}return a===n&&4===o&&(r=new O(i,K(s,l,64),1n)),r?r.assertValidity():u("bad point: not on curve")}static fromHex(e){return O.fromBytes(w(e))}get x(){return this.toAffine().x}get y(){return this.toAffine().y}equals(e){const{X:t,Y:n,Z:r}=this,{X:a,Y:o,Z:s}=E(e),i=T(t*s),c=T(a*r),f=T(n*s),l=T(o*r);return i===c&&f===l}is0(){return this.equals(j)}negate(){return new O(this.X,T(-this.Y),this.Z)}double(){return this.add(this)}add(e){const{X:t,Y:n,Z:r}=this,{X:a,Y:o,Z:s}=E(e);let i=0n,c=0n,l=0n;const d=T(3n*f);let u=T(t*a),y=T(n*o),p=T(r*s),m=T(t+n),h=T(a+o);m=T(m*h),h=T(u+y),m=T(m-h),h=T(t+r);let g=T(a+s);return h=T(h*g),g=T(u+p),h=T(h-g),g=T(n+r),i=T(o+s),g=T(g*i),i=T(y+p),g=T(g-i),l=T(0n*h),i=T(d*p),l=T(i+l),i=T(y-l),l=T(y+l),c=T(i*l),y=T(u+u),y=T(y+u),p=T(0n*p),h=T(d*h),y=T(y+p),p=T(u-p),p=T(0n*p),h=T(h+p),u=T(y*h),c=T(c+u),u=T(g*h),i=T(m*i),i=T(i-u),u=T(m*y),l=T(g*l),l=T(l+u),new O(i,c,l)}subtract(e){return this.add(E(e).negate())}multiply(e,t=!0){if(!t&&0n===e)return j;if((e=>{P(e,1n,s)})(e),1n===e)return this;if(this.equals($))return de(e).p;let n=j,r=$;for(let a=this;e>0n;a=a.double(),e>>=1n)1n&e?n=n.add(a):t&&(r=r.add(a));return n}multiplyUnsafe(e){return this.multiply(e,!1)}toAffine(){const{X:e,Y:t,Z:n}=this;if(this.equals(j))return{x:0n,y:0n};if(1n===n)return{x:e,y:t};const r=((e,t)=>{(0n===e||t<=0n)&&u("no inverse n="+e+" mod="+t);let n=T(e,t),r=t,a=0n,o=1n;for(;0n!==n;){const e=r%n,t=a-o*(r/n);r=n,n=e,a=o,o=t}return 1n===r?T(a,t):u("no inverse")})(n,o);return 1n!==T(n*r)&&u("inverse invalid"),{x:T(e*r),y:T(t*r)}}assertValidity(){const{x:e,y:t}=this.toAffine();return L(e),L(t),T(t*t)===U(e)?this:u("bad point: not on curve")}toBytes(e=!0){const{x:t,y:n}=this.assertValidity().toAffine(),r=B(t);return e?A((e=>R(D(e)?2:3))(n),r):A(R(4),r,B(n))}toHex(e){return h(this.toBytes(e))}}const $=new O(i,c,1n),j=new O(0n,1n,0n);O.BASE=$,O.ZERO=j;const H=e=>x("0x"+(h(e)||"0")),K=(e,t,n)=>H(e.subarray(t,n)),q=2n**256n,B=e=>w(m(P(e,0n,q),64)),M="SHA-256",V={async hmacSha256Async(e,t){const n=v(),r="HMAC",a=await n.importKey("raw",e,{name:r,hash:{name:M}},!1,["sign"]);return p(await n.sign(r,a,t))},hmacSha256:void 0,sha256Async:async e=>p(await v().digest(M,e)),sha256:void 0},X=e=>Uint8Array.from("BIP0340/"+e,(e=>e.charCodeAt(0))),Z="nonce",N="challenge",Y=(e,...t)=>{const n=(e=>{const t=V[e];return"function"!=typeof t&&u("hashes."+e+" not set"),t})("sha256"),r=n(X(e));return n(A(r,r,...t))},G=async(e,...t)=>{const n=V.sha256Async,r=await n(X(e));return await n(A(r,r,...t))},J=e=>{const t=(e=>{const t=H(y(e,l,"secret key"));return P(t,1n,s,"invalid secret key: outside of range")})(e),n=$.multiply(t),{x:r,y:a}=n.assertValidity().toAffine();return{d:D(a)?t:S(-t),px:B(r)}},_=e=>S(H(e)),z=(...e)=>_(Y(N,...e)),F=async(...e)=>_(await G(N,...e)),Q=e=>J(e).px,W=(ee=Q,e=>{const t=((e=k(d.seed))=>{y(e),(e.length<d.seed||e.length>1024)&&u("expected 40-1024b");const t=T(H(e),s-1n);return B(t+1n)})(e);return{secretKey:t,publicKey:ee(t)}});var ee;const te=(e,t,n)=>{const{px:r,d:a}=J(t);return{m:y(e),px:r,d:a,a:y(n,l)}},ne=e=>{const t=_(e);0n===t&&u("sign failed: k is zero");const{px:n,d:r}=J(B(t));return{rx:n,k:r}},re=(e,t,n,r)=>A(t,B(S(e+n*r))),ae="invalid signature produced",oe=(e,t,n,r)=>{const a=y(e,64,"signature"),i=y(t,void 0,"message"),c=y(n,l,"publicKey");try{const e=H(c),t=I(e),n=D(t)?t:T(-t),u=new O(e,n,1n).assertValidity(),y=B(u.toAffine().x),p=K(a,0,l);P(p,1n,o);const m=K(a,l,64);P(m,1n,s);return f=r(A(B(p),y,i)),d=e=>{const{x:t,y:n}=(r=u,a=m,o=S(-e),$.multiply(a,!1).add(r.multiply(o,!1)).assertValidity()).toAffine();var r,a,o;return!(!D(n)||t!==p)},f instanceof Promise?f.then(d):d(f)}catch(e){return!1}var f,d},se=(e,t,n)=>oe(e,t,n,z),ie=async(e,t,n)=>oe(e,t,n,F),ce={keygen:W,getPublicKey:Q,sign(e,t,n=k(l)){const{m:r,px:a,d:o,a:s}=te(e,t,n),i=Y("aux",s),c=B(o^H(i)),f=Y(Z,c,a,r),{rx:d,k:y}=ne(f),p=z(d,a,r),m=re(y,d,p,o);return se(m,r,a)||u(ae),m},verify:se,async signAsync(e,t,n=k(l)){const{m:r,px:a,d:o,a:s}=te(e,t,n),i=await G("aux",s),c=B(o^H(i)),f=await G(Z,c,a,r),{rx:d,k:y}=ne(f),p=await F(d,a,r),m=re(y,d,p,o);return await ie(m,r,a)||u(ae),m},verifyAsync:ie};let fe;const le=(e,t)=>{const n=t.negate();return e?n:t},de=e=>{const t=fe||(fe=(()=>{const e=[];let t=$,n=t;for(let r=0;r<33;r++){n=t,e.push(n);for(let r=1;r<128;r++)n=n.add(t),e.push(n);t=n.double()}return e})());let n=j,r=$;const a=x(255),o=x(8);for(let s=0;s<33;s++){let i=Number(e&a);e>>=o,i>128&&(i-=256,e+=1n);const c=128*s,f=c,l=c+Math.abs(i)-1,d=s%2!=0,u=i<0;0===i?r=r.add(le(d,t[f])):n=n.add(le(u,t[l]))}return 0n!==e&&u("invalid wnaf"),{p:n,f:r}},{floor:ue,random:ye,sin:pe}=Math,me="Trystero",he=(e,t)=>Array(e).fill().map(t),ge=e=>he(e,(()=>"0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz"[ue(62*ye())])).join(""),we=ge(20),be=Promise.all.bind(Promise),ve="undefined"!=typeof window,{entries:Ae,fromEntries:ke,keys:xe}=Object,Pe=()=>{},Te=e=>Error(`${me}: ${e}`),Se=new TextEncoder,Ee=new TextDecoder,Ue=e=>Se.encode(e),Ce=e=>Ee.decode(e),Le=e=>e.reduce(((e,t)=>e+t.toString(16).padStart(2,"0")),""),De=(...e)=>e.join("@"),Re=JSON.stringify,Ie=JSON.parse,Oe=(e,t=Number.MAX_SAFE_INTEGER)=>e.split("").reduce(((e,t)=>e+t.charCodeAt(0)),0)%t,$e={};let je=null,He=null;const Ke=()=>{je||(je=new Promise((e=>{He=e})).finally((()=>{He=null,je=null})))},qe=()=>He?.(),Be="AES-GCM",Me={},Ve=async(e,t)=>new Uint8Array(await crypto.subtle.digest(e,Ue(t))),Xe=async e=>Me[e]||=Array.from(await Ve("SHA-1",e)).map((e=>e.toString(36))).join(""),Ze=async(e,t)=>{const n=crypto.getRandomValues(new Uint8Array(16));var r;return n.join(",")+"$"+(r=await crypto.subtle.encrypt({name:Be,iv:n},await e,Ue(t)),btoa(String.fromCharCode.apply(null,new Uint8Array(r))))},Ne=async(e,t)=>{const[n,r]=t.split("$");return Ce(await crypto.subtle.decrypt({name:Be,iv:new Uint8Array(n.split(","))},await e,(e=>{const t=atob(e);return new Uint8Array(t.length).map(((e,n)=>t.charCodeAt(n))).buffer})(r)))},Ye="icegatheringstatechange",Ge="offer";var Je=(e,{rtcConfig:t,rtcPolyfill:n,turnConfig:r})=>{const a=new(n||RTCPeerConnection)({iceServers:_e.concat(r||[]),...t}),o={};let s=!1,i=!1,c=null;const f=e=>{e.binaryType="arraybuffer",e.bufferedAmountLowThreshold=65535,e.onmessage=e=>o.data?.(e.data),e.onopen=()=>o.connect?.(),e.onclose=()=>o.close?.(),e.onerror=e=>o.error?.(e)},l=e=>Promise.race([new Promise((t=>{const n=()=>{"complete"===e.iceGatheringState&&(e.removeEventListener(Ye,n),t())};e.addEventListener(Ye,n),n()})),new Promise((e=>setTimeout(e,5e3)))]).then((()=>({type:e.localDescription.type,sdp:e.localDescription.sdp.replace(/a=ice-options:trickle\s\n/g,"")})));return e?(c=a.createDataChannel("data"),f(c)):a.ondatachannel=({channel:e})=>{c=e,f(e)},a.onnegotiationneeded=async()=>{try{s=!0,await a.setLocalDescription();const e=await l(a);o.signal?.(e)}catch(e){o.error?.(e)}finally{s=!1}},a.onconnectionstatechange=()=>{["disconnected","failed","closed"].includes(a.connectionState)&&o.close?.()},a.ontrack=e=>{o.track?.(e.track,e.streams[0]),o.stream?.(e.streams[0])},a.onremovestream=e=>o.stream?.(e.stream),e&&(a.canTrickleIceCandidates||a.onnegotiationneeded()),{created:Date.now(),connection:a,get channel(){return c},get isDead(){return"closed"===a.connectionState},async signal(t){if("open"!==c?.readyState||t.sdp?.includes("a=rtpmap"))try{if(t.type===Ge){if(s||"stable"!==a.signalingState&&!i){if(e)return;await be([a.setLocalDescription({type:"rollback"}),a.setRemoteDescription(t)])}else await a.setRemoteDescription(t);await a.setLocalDescription();const n=await l(a);return o.signal?.(n),n}if("answer"===t.type){i=!0;try{await a.setRemoteDescription(t)}finally{i=!1}}}catch(e){o.error?.(e)}},sendData:e=>c.send(e),destroy(){c?.close(),a.close(),s=!1,i=!1},setHandlers:e=>Object.assign(o,e),offerPromise:e?new Promise((e=>o.signal=t=>{t.type===Ge&&e(t)})):Promise.resolve(),addStream:e=>e.getTracks().forEach((t=>a.addTrack(t,e))),removeStream:e=>a.getSenders().filter((t=>e.getTracks().includes(t.track))).forEach((e=>a.removeTrack(e))),addTrack:(e,t)=>a.addTrack(e,t),removeTrack(e){const t=a.getSenders().find((t=>t.track===e));t&&a.removeTrack(t)},replaceTrack(e,t){const n=a.getSenders().find((t=>t.track===e));if(n)return n.replaceTrack(t)}}};const _e=[...he(3,((e,t)=>`stun:stun${t||""}.l.google.com:19302`)),"stun:stun.cloudflare.com:3478"].map((e=>({urls:e}))),ze=Object.getPrototypeOf(Uint8Array),Fe=16369,Qe=255,We="bufferedamountlow",et=e=>"@_"+e;const tt={},nt="EVENT",{secretKey:rt,publicKey:at}=ce.keygen(),ot=Le(at),st={},it={},ct={},ft=()=>Math.floor(Date.now()/1e3),lt=e=>ct[e]??=Oe(e,1e4)+2e4,dt=async(e,t)=>{const n={kind:lt(e),tags:[["x",e]],created_at:ft(),content:t,pubkey:ot},r=await Ve("SHA-256",Re([0,n.pubkey,n.created_at,n.kind,n.tags,n.content]));return Re([nt,{...n,id:Le(r),sig:Le(await ce.signAsync(r,rt))}])},ut=(e,t)=>(st[e]=t,Re(["REQ",e,{kinds:[lt(t)],since:ft(),"#x":[t]}])),yt=e=>(delete st[e],Re(["CLOSE",e])),pt=(({init:e,subscribe:t,announce:n})=>{const r={};let a,o,s,i,c=!1;return(f,l,d)=>{const{appId:u}=f;if(r[u]?.[l])return r[u][l];const y={},p={},m=De(me,u,l),h=Xe(m),g=Xe(De(m,we)),w=(async(e,t,n)=>crypto.subtle.importKey("raw",await crypto.subtle.digest({name:"SHA-256"},Ue(`${e}:${t}:${n}`)),{name:Be},!1,["encrypt","decrypt"]))(f.password||"",u,l),b=e=>async t=>({type:t.type,sdp:await e(w,t.sdp)}),v=b(Ne),A=b(Ze),k=()=>Je(!0,f),x=(e,t,n)=>{p[t]?p[t]!==e&&e.destroy():(p[t]=e,L(e,t),y[t]?.forEach(((e,t)=>{t!==n&&e.destroy()})),delete y[t])},P=(e,t)=>{p[t]===e&&delete p[t]},T=e=>(o.push(...he(e,k)),be(o.splice(0,e).map((e=>e.offerPromise.then(A).then((t=>({peer:e,offer:t}))))))),S=(e,t)=>d?.({error:`incorrect password (${f.password}) when decrypting ${t}`,appId:u,peerId:e,roomId:l});if(!f)throw Te("requires a config map as the first argument");if(!u&&!f.firebaseApp)throw Te("config map is missing appId field");if(!l)throw Te("roomId argument required");if(!c){const t=e(f);o=he(20,k),a=Array.isArray(t)?t:[t],c=!0,s=setInterval((()=>o=o.filter((e=>{const t=Date.now()-e.created<57333;return t||e.destroy(),t}))),59052.99),i=f.manualRelayReconnection?Pe:(()=>{if(ve){const e=new AbortController;return addEventListener("online",qe,{signal:e.signal}),addEventListener("offline",Ke,{signal:e.signal}),()=>e.abort()}return Pe})()}const E=a.map((()=>5333)),U=[],C=a.map((async(e,n)=>t(await e,await h,await g,(e=>async(t,n,r)=>{const[a,o]=await be([h,g]);if(t!==a&&t!==o)return;const{peerId:s,offer:i,answer:c,peer:l}="string"==typeof n?Ie(n):n;if(s!==we&&!p[s])if(!s||i||c){if(i){const t=y[s]?.[e];if(t&&we>s)return;const n=Je(!1,f);let a;n.setHandlers({connect:()=>x(n,s,e),close:()=>P(n,s)});try{a=await v(i)}catch{return void S(s,"offer")}if(n.isDead)return;const[o,c]=await be([Xe(De(m,s)),n.signal(a)]);r(o,Re({peerId:we,answer:await A(c)}))}else if(c){let t;try{t=await v(c)}catch(e){return void S(s,"answer")}if(l)l.setHandlers({connect:()=>x(l,s,e),close:()=>P(l,s)}),l.signal(t);else{const n=y[s]?.[e];n&&!n.isDead&&n.signal(t)}}}else{if(y[s]?.[e])return;const[[{peer:t,offer:n}],a]=await be([T(1),Xe(De(m,s))]);y[s]||=[],y[s][e]=t,setTimeout((()=>((e,t)=>{if(p[e])return;const n=y[e]?.[t];n&&(delete y[e][t],n.destroy())})(s,e)),.9*E[e]),t.setHandlers({connect:()=>x(t,s,e),close:()=>P(t,s)}),r(a,Re({peerId:we,offer:n}))}})(n),T)));be([h,g]).then((([e,t])=>{const r=async(a,o)=>{const s=await n(a,e,t);"number"==typeof s&&(E[o]=s),U[o]=setTimeout((()=>r(a,o)),E[o])};C.forEach((async(e,t)=>{await e,r(await a[t],t)}))}));let L=Pe;return r[u]||={},r[u][l]=((e,t,n)=>{const r={},a={},o={},s={},i={},c={},f={},l={onPeerJoin:Pe,onPeerLeave:Pe,onPeerStream:Pe,onPeerTrack:Pe},d=(e,t)=>(e?Array.isArray(e)?e:[e]:xe(r)).flatMap((e=>{const n=r[e];return n?t(e,n):(console.warn(`${me}: no peer with id ${e} found`),[])})),u=e=>{r[e]&&(r[e].destroy(),delete r[e],delete s[e],delete i[e],l.onPeerLeave(e),t(e))},y=e=>{if(a[e])return o[e];if(!e)throw Te("action type argument is required");const t=Ue(e);if(t.byteLength>12)throw Te(`action type string "${e}" (${t.byteLength}b) exceeds byte limit (12). Hint: choose a shorter name.`);const n=new Uint8Array(12);n.set(t);let s=0;return a[e]={onComplete:Pe,onProgress:Pe,setOnComplete:t=>a[e]={...a[e],onComplete:t},setOnProgress:t=>a[e]={...a[e],onProgress:t},async send(e,t,a,o){if(a&&"object"!=typeof a)throw Te("action meta argument must be an object");const i=typeof e;if("undefined"===i)throw Te("action data cannot be undefined");const c="string"!==i,f=e instanceof Blob,l=f||e instanceof ArrayBuffer||e instanceof ze;if(a&&!l)throw Te("action meta argument can only be used with binary data");const u=l?new Uint8Array(f?await e.arrayBuffer():e):Ue(c?Re(e):e),y=a?Ue(Re(a)):null,p=Math.ceil(u.byteLength/Fe)+(a?1:0)||1,m=he(p,((e,t)=>{const r=t===p-1,o=a&&0===t,i=new Uint8Array(15+(o?y.byteLength:r?u.byteLength-Fe*(p-(a?2:1)):Fe));return i.set(n),i.set([s],12),i.set([r|o<<1|l<<2|c<<3],13),i.set([Math.round((t+1)/p*Qe)],14),i.set(a?o?y:u.subarray((t-1)*Fe,t*Fe):u.subarray(t*Fe,(t+1)*Fe),15),i}));return s=s+1&Qe,be(d(t,(async(e,t)=>{const{channel:n}=t;let s=0;for(;s<p;){const i=m[s];if(n.bufferedAmount>n.bufferedAmountLowThreshold&&await new Promise((e=>{const t=()=>{n.removeEventListener(We,t),e()};n.addEventListener(We,t)})),!r[e])break;t.sendData(i),s++,o?.(i[14]/Qe,e,a)}})))}},o[e]||=[a[e].send,a[e].setOnComplete,a[e].setOnProgress]},p=async()=>{await T(""),await new Promise((e=>setTimeout(e,99))),Ae(r).forEach((([e,t])=>{t.destroy(),delete r[e]})),n()},[m,h]=y(et("ping")),[g,w]=y(et("pong")),[b,v]=y(et("signal")),[A,k]=y(et("stream")),[x,P]=y(et("track")),[T,S]=y(et("leave"));return e(((e,t)=>{r[t]||(r[t]=e,e.setHandlers({data:e=>((e,t)=>{const n=new Uint8Array(t),r=Ce(n.subarray(0,12)).replaceAll("\0",""),[o]=n.subarray(12,13),[i]=n.subarray(13,14),[c]=n.subarray(14,15),f=n.subarray(15),l=!!(1&i),d=!!(2&i),u=!!(4&i),y=!!(8&i);if(!a[r])return void console.warn(`${me}: received message with unregistered type (${r})`);s[e]||={},s[e][r]||={};const p=s[e][r][o]||={chunks:[]};if(d?p.meta=Ie(Ce(f)):p.chunks.push(f),a[r].onProgress(c/Qe,e,p.meta),!l)return;const m=new Uint8Array(p.chunks.reduce(((e,t)=>e+t.byteLength),0));if(p.chunks.reduce(((e,t)=>(m.set(t,e),e+t.byteLength)),0),delete s[e][r][o],u)a[r].onComplete(m,e,p.meta);else{const t=Ce(m);a[r].onComplete(y?Ie(t):t,e)}})(t,e),stream(e){l.onPeerStream(e,t,c[t]),delete c[t]},track(e,n){l.onPeerTrack(e,n,t,f[t]),delete f[t]},signal:e=>b(e,t),close:()=>u(t),error(e){console.error(e),u(t)}}),l.onPeerJoin(t))})),h(((e,t)=>g("",t))),w(((e,t)=>{i[t]?.(),delete i[t]})),v(((e,t)=>r[t]?.signal(e))),k(((e,t)=>c[t]=e)),P(((e,t)=>f[t]=e)),S(((e,t)=>u(t))),ve&&addEventListener("beforeunload",p),{makeAction:y,leave:p,async ping(e){if(!e)throw Te("ping() must be called with target peer ID");const t=Date.now();return m("",e),await new Promise((t=>i[e]=t)),Date.now()-t},getPeers:()=>ke(Ae(r).map((([e,t])=>[e,t.connection]))),addStream:(e,t,n)=>d(t,(async(t,r)=>{n&&await A(n,t),r.addStream(e)})),removeStream:(e,t)=>d(t,((t,n)=>n.removeStream(e))),addTrack:(e,t,n,r)=>d(n,(async(n,a)=>{r&&await x(r,n),a.addTrack(e,t)})),removeTrack:(e,t)=>d(t,((t,n)=>n.removeTrack(e))),replaceTrack:(e,t,n,r)=>d(n,(async(n,a)=>{r&&await x(r,n),a.replaceTrack(e,t)})),onPeerJoin:e=>l.onPeerJoin=e,onPeerLeave:e=>l.onPeerLeave=e,onPeerStream:e=>l.onPeerStream=e,onPeerTrack:e=>l.onPeerTrack=e}})((e=>L=e),(e=>delete p[e]),(()=>{delete r[u][l],U.forEach(clearTimeout),C.forEach((async e=>(await e)())),clearInterval(s),i(),c=!1}))}})({init:e=>((e,t,n)=>(e.relayUrls||((e,t)=>{const n=[...e],r=()=>{const e=1e4*pe(t++);return e-ue(e)};let a=n.length;for(;a;){const e=ue(r()*a--);[n[a],n[e]]=[n[e],n[a]]}return n})(t,Oe(e.appId))).slice(0,e.relayUrls?e.relayUrls.length:e.relayRedundancy||n))(e,gt,5).map((e=>{const t=((e,t)=>{const n={},r=()=>{const a=new WebSocket(e);a.onclose=()=>{je?je.then(r):($e[e]??=3333,setTimeout(r,$e[e]),$e[e]*=2)},a.onmessage=e=>t(e.data),n.socket=a,n.url=a.url,n.ready=new Promise((t=>a.onopen=()=>{t(n),$e[e]=3333})),n.send=e=>{1===a.readyState&&a.send(e)}};return r(),n})(e,(e=>{const[n,r,a,o]=Ie(e);if(n===nt)it[r]?.(st[r],a.content);else{const e=`${me}: relay failure from ${t.url} - `;"NOTICE"===n?console.warn(e+r):"OK"!==n||a||console.warn(e+o)}}));return tt[e]=t,t.ready})),subscribe(e,t,n,r){const a=ge(64),o=ge(64);return it[a]=it[o]=(t,n)=>r(t,n,(async(t,n)=>e.send(await dt(t,n)))),e.send(ut(a,t)),e.send(ut(o,n)),()=>{e.send(yt(a)),e.send(yt(o)),delete it[a],delete it[o]}},announce:async(e,t)=>e.send(await dt(t,Re({peerId:we})))}),mt=(ht=tt,()=>ke(Ae(ht).map((([e,t])=>[e,t.socket]))));var ht;const gt=["black.nostrcity.club","ftp.halifax.rwth-aachen.de/nostr","nos.lol","nostr.cool110.xyz","nostr.data.haus","nostr.sathoarder.com","nostr.vulpem.com","relay.agorist.space","relay.binaryrobot.com","relay.damus.io","relay.fountain.fm","relay.mostro.network","relay.nostraddress.com","relay.nostrdice.com","relay.nostromo.social","relay.oldenburg.cool","relay.verified-nostr.com","yabu.me/v2"].map((e=>"wss://"+e))},{"@parcel/transformer-js/src/esmodule-helpers.js":"XTfsy"}]},[],0,"parcelRequire55a5");