@liascript/exporter
Version:
A generic exporter for LiaScript
1 lines • 13.4 kB
JavaScript
!function(e,r,t,n,a){var o="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},s="function"==typeof o[n]&&o[n],i=s.cache||{},c="undefined"!=typeof module&&"function"==typeof module.require&&module.require.bind(module);function l(r,t){if(!i[r]){if(!e[r]){var a="function"==typeof o[n]&&o[n];if(!t&&a)return a(r,!0);if(s)return s(r,!0);if(c&&"string"==typeof r)return c(r);var d=new Error("Cannot find module '"+r+"'");throw d.code="MODULE_NOT_FOUND",d}u.resolve=function(t){var n=e[r][1][t];return null!=n?n:t},u.cache={};var f=i[r]=new l.Module(r);e[r][0].call(f.exports,u,f,f.exports,this)}return i[r].exports;function u(e){var r=u.resolve(e);return!1===r?{}:l(r)}}l.isParcelRequire=!0,l.Module=function(e){this.id=e,this.bundle=l,this.exports={}},l.modules=e,l.cache=i,l.parent=s,l.register=function(r,t){e[r]=[function(e,r){r.exports=t},{}]},Object.defineProperty(l,"root",{get:function(){return o[n]}}),o[n]=l;for(var d=0;d<r.length;d++)l(r[d])}({biIhW:[function(e,r,t){var n=e("@parcel/transformer-js/src/esmodule-helpers.js");n.defineInteropFlag(t),n.export(t,"defaultRelayUrls",(()=>ae)),n.export(t,"getRelaySockets",(()=>te)),n.export(t,"joinRoom",(()=>re)),n.export(t,"pauseRelayReconnection",(()=>D)),n.export(t,"resumeRelayReconnection",(()=>I)),n.export(t,"selfId",(()=>l));const{floor:a,random:o}=Math,s="Trystero",i=(e,r)=>Array(e).fill().map(r),c=e=>i(e,(()=>"0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz"[a(62*o())])).join(""),l=c(20),d=Promise.all.bind(Promise),f="undefined"!=typeof window,{entries:u,fromEntries:p,keys:y}=Object,m=()=>{},w=e=>Error(`${s}: ${e}`),g=new TextEncoder,h=new TextDecoder,b=e=>g.encode(e),v=e=>h.decode(e),k=(...e)=>e.join("@"),P=JSON.stringify,T=JSON.parse,A={};let S=null,L=null;const D=()=>{S||(S=new Promise((e=>{L=e})).finally((()=>{L=null,S=null})))},I=()=>L?.(),E="AES-GCM",$={},C=async e=>$[e]||=Array.from(await(async(e,r)=>new Uint8Array(await crypto.subtle.digest("SHA-1",b(r))))(0,e)).map((e=>e.toString(36))).join(""),R=async(e,r)=>{const t=crypto.getRandomValues(new Uint8Array(16));var n;return t.join(",")+"$"+(n=await crypto.subtle.encrypt({name:E,iv:t},await e,b(r)),btoa(String.fromCharCode.apply(null,new Uint8Array(n))))},U=async(e,r)=>{const[t,n]=r.split("$");return v(await crypto.subtle.decrypt({name:E,iv:new Uint8Array(t.split(","))},await e,(e=>{const r=atob(e);return new Uint8Array(r.length).map(((e,t)=>r.charCodeAt(t))).buffer})(n)))},_="icegatheringstatechange",j="offer";var x=(e,{rtcConfig:r,rtcPolyfill:t,turnConfig:n})=>{const a=new(t||RTCPeerConnection)({iceServers:O.concat(n||[]),...r}),o={};let s=!1,i=!1,c=null;const l=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)},f=e=>Promise.race([new Promise((r=>{const t=()=>{"complete"===e.iceGatheringState&&(e.removeEventListener(_,t),r())};e.addEventListener(_,t),t()})),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"),l(c)):a.ondatachannel=({channel:e})=>{c=e,l(e)},a.onnegotiationneeded=async()=>{try{s=!0,await a.setLocalDescription();const e=await f(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(r){if("open"!==c?.readyState||r.sdp?.includes("a=rtpmap"))try{if(r.type===j){if(s||"stable"!==a.signalingState&&!i){if(e)return;await d([a.setLocalDescription({type:"rollback"}),a.setRemoteDescription(r)])}else await a.setRemoteDescription(r);await a.setLocalDescription();const t=await f(a);return o.signal?.(t),t}if("answer"===r.type){i=!0;try{await a.setRemoteDescription(r)}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=r=>{r.type===j&&e(r)})):Promise.resolve(),addStream:e=>e.getTracks().forEach((r=>a.addTrack(r,e))),removeStream:e=>a.getSenders().filter((r=>e.getTracks().includes(r.track))).forEach((e=>a.removeTrack(e))),addTrack:(e,r)=>a.addTrack(e,r),removeTrack(e){const r=a.getSenders().find((r=>r.track===e));r&&a.removeTrack(r)},replaceTrack(e,r){const t=a.getSenders().find((r=>r.track===e));if(t)return t.replaceTrack(r)}}};const O=[...i(3,((e,r)=>`stun:stun${r||""}.l.google.com:19302`)),"stun:stun.cloudflare.com:3478"].map((e=>({urls:e}))),M=Object.getPrototypeOf(Uint8Array),H=16369,q=255,J="bufferedamountlow",N=e=>"@_"+e;var B=(e,r,t)=>{const n={},a={},o={},c={},l={},g={},h={},k={onPeerJoin:m,onPeerLeave:m,onPeerStream:m,onPeerTrack:m},A=(e,r)=>(e?Array.isArray(e)?e:[e]:y(n)).flatMap((e=>{const t=n[e];return t?r(e,t):(console.warn(`${s}: no peer with id ${e} found`),[])})),S=e=>{n[e]&&(n[e].destroy(),delete n[e],delete c[e],delete l[e],k.onPeerLeave(e),r(e))},L=e=>{if(a[e])return o[e];if(!e)throw w("action type argument is required");const r=b(e);if(r.byteLength>12)throw w(`action type string "${e}" (${r.byteLength}b) exceeds byte limit (12). Hint: choose a shorter name.`);const t=new Uint8Array(12);t.set(r);let s=0;return a[e]={onComplete:m,onProgress:m,setOnComplete:r=>a[e]={...a[e],onComplete:r},setOnProgress:r=>a[e]={...a[e],onProgress:r},async send(e,r,a,o){if(a&&"object"!=typeof a)throw w("action meta argument must be an object");const c=typeof e;if("undefined"===c)throw w("action data cannot be undefined");const l="string"!==c,f=e instanceof Blob,u=f||e instanceof ArrayBuffer||e instanceof M;if(a&&!u)throw w("action meta argument can only be used with binary data");const p=u?new Uint8Array(f?await e.arrayBuffer():e):b(l?P(e):e),y=a?b(P(a)):null,m=Math.ceil(p.byteLength/H)+(a?1:0)||1,g=i(m,((e,r)=>{const n=r===m-1,o=a&&0===r,i=new Uint8Array(15+(o?y.byteLength:n?p.byteLength-H*(m-(a?2:1)):H));return i.set(t),i.set([s],12),i.set([n|o<<1|u<<2|l<<3],13),i.set([Math.round((r+1)/m*q)],14),i.set(a?o?y:p.subarray((r-1)*H,r*H):p.subarray(r*H,(r+1)*H),15),i}));return s=s+1&q,d(A(r,(async(e,r)=>{const{channel:t}=r;let s=0;for(;s<m;){const i=g[s];if(t.bufferedAmount>t.bufferedAmountLowThreshold&&await new Promise((e=>{const r=()=>{t.removeEventListener(J,r),e()};t.addEventListener(J,r)})),!n[e])break;r.sendData(i),s++,o?.(i[14]/q,e,a)}})))}},o[e]||=[a[e].send,a[e].setOnComplete,a[e].setOnProgress]},D=async()=>{await B(""),await new Promise((e=>setTimeout(e,99))),u(n).forEach((([e,r])=>{r.destroy(),delete n[e]})),t()},[I,E]=L(N("ping")),[$,C]=L(N("pong")),[R,U]=L(N("signal")),[_,j]=L(N("stream")),[x,O]=L(N("track")),[B,F]=L(N("leave"));return e(((e,r)=>{n[r]||(n[r]=e,e.setHandlers({data:e=>((e,r)=>{const t=new Uint8Array(r),n=v(t.subarray(0,12)).replaceAll("\0",""),[o]=t.subarray(12,13),[i]=t.subarray(13,14),[l]=t.subarray(14,15),d=t.subarray(15),f=!!(1&i),u=!!(2&i),p=!!(4&i),y=!!(8&i);if(!a[n])return void console.warn(`${s}: received message with unregistered type (${n})`);c[e]||={},c[e][n]||={};const m=c[e][n][o]||={chunks:[]};if(u?m.meta=T(v(d)):m.chunks.push(d),a[n].onProgress(l/q,e,m.meta),!f)return;const w=new Uint8Array(m.chunks.reduce(((e,r)=>e+r.byteLength),0));if(m.chunks.reduce(((e,r)=>(w.set(r,e),e+r.byteLength)),0),delete c[e][n][o],p)a[n].onComplete(w,e,m.meta);else{const r=v(w);a[n].onComplete(y?T(r):r,e)}})(r,e),stream(e){k.onPeerStream(e,r,g[r]),delete g[r]},track(e,t){k.onPeerTrack(e,t,r,h[r]),delete h[r]},signal:e=>R(e,r),close:()=>S(r),error(e){console.error(e),S(r)}}),k.onPeerJoin(r))})),E(((e,r)=>$("",r))),C(((e,r)=>{l[r]?.(),delete l[r]})),U(((e,r)=>n[r]?.signal(e))),j(((e,r)=>g[r]=e)),O(((e,r)=>h[r]=e)),F(((e,r)=>S(r))),f&&addEventListener("beforeunload",D),{makeAction:L,leave:D,async ping(e){if(!e)throw w("ping() must be called with target peer ID");const r=Date.now();return I("",e),await new Promise((r=>l[e]=r)),Date.now()-r},getPeers:()=>p(u(n).map((([e,r])=>[e,r.connection]))),addStream:(e,r,t)=>A(r,(async(r,n)=>{t&&await _(t,r),n.addStream(e)})),removeStream:(e,r)=>A(r,((r,t)=>t.removeStream(e))),addTrack:(e,r,t,n)=>A(t,(async(t,a)=>{n&&await x(n,t),a.addTrack(e,r)})),removeTrack:(e,r)=>A(r,((r,t)=>t.removeTrack(e))),replaceTrack:(e,r,t,n)=>A(t,(async(t,a)=>{n&&await x(n,t),a.replaceTrack(e,r)})),onPeerJoin:e=>k.onPeerJoin=e,onPeerLeave:e=>k.onPeerLeave=e,onPeerStream:e=>k.onPeerStream=e,onPeerTrack:e=>k.onPeerTrack=e}};const F={},G={},W={},z={},K={},V={},X={},Q={},Y=async e=>{if(G[e])return G[e];const r=(await C(e)).slice(0,20);return G[e]=r,W[r]=e,r},Z=async(e,r,t)=>e.send(P({action:"announce",info_hash:await Y(r),peer_id:l,...t})),ee=(e,r,t)=>console.warn(`${s}: torrent tracker ${t?"failure":"warning"} from ${e} - ${r}`),re=(({init:e,subscribe:r,announce:t})=>{const n={};let a,o,c,u,p=!1;return(y,g,h)=>{const{appId:v}=y;if(n[v]?.[g])return n[v][g];const A={},S={},L=k(s,v,g),$=C(L),_=C(k(L,l)),j=(async(e,r,t)=>crypto.subtle.importKey("raw",await crypto.subtle.digest({name:"SHA-256"},b(`${e}:${r}:${t}`)),{name:E},!1,["encrypt","decrypt"]))(y.password||"",v,g),O=e=>async r=>({type:r.type,sdp:await e(j,r.sdp)}),M=O(U),H=O(R),q=()=>x(!0,y),J=(e,r,t)=>{S[r]?S[r]!==e&&e.destroy():(S[r]=e,V(e,r),A[r]?.forEach(((e,r)=>{r!==t&&e.destroy()})),delete A[r])},N=(e,r)=>{S[r]===e&&delete S[r]},F=e=>(o.push(...i(e,q)),d(o.splice(0,e).map((e=>e.offerPromise.then(H).then((r=>({peer:e,offer:r}))))))),G=(e,r)=>h?.({error:`incorrect password (${y.password}) when decrypting ${r}`,appId:v,peerId:e,roomId:g});if(!y)throw w("requires a config map as the first argument");if(!v&&!y.firebaseApp)throw w("config map is missing appId field");if(!g)throw w("roomId argument required");if(!p){const r=e(y);o=i(20,q),a=Array.isArray(r)?r:[r],p=!0,c=setInterval((()=>o=o.filter((e=>{const r=Date.now()-e.created<57333;return r||e.destroy(),r}))),59052.99),u=y.manualRelayReconnection?m:(()=>{if(f){const e=new AbortController;return addEventListener("online",I,{signal:e.signal}),addEventListener("offline",D,{signal:e.signal}),()=>e.abort()}return m})()}const W=a.map((()=>5333)),z=[],K=a.map((async(e,t)=>r(await e,await $,await _,(e=>async(r,t,n)=>{const[a,o]=await d([$,_]);if(r!==a&&r!==o)return;const{peerId:s,offer:i,answer:c,peer:f}="string"==typeof t?T(t):t;if(s!==l&&!S[s])if(!s||i||c){if(i){const r=A[s]?.[e];if(r&&l>s)return;const t=x(!1,y);let a;t.setHandlers({connect:()=>J(t,s,e),close:()=>N(t,s)});try{a=await M(i)}catch{return void G(s,"offer")}if(t.isDead)return;const[o,c]=await d([C(k(L,s)),t.signal(a)]);n(o,P({peerId:l,answer:await H(c)}))}else if(c){let r;try{r=await M(c)}catch(e){return void G(s,"answer")}if(f)f.setHandlers({connect:()=>J(f,s,e),close:()=>N(f,s)}),f.signal(r);else{const t=A[s]?.[e];t&&!t.isDead&&t.signal(r)}}}else{if(A[s]?.[e])return;const[[{peer:r,offer:t}],a]=await d([F(1),C(k(L,s))]);A[s]||=[],A[s][e]=r,setTimeout((()=>((e,r)=>{if(S[e])return;const t=A[e]?.[r];t&&(delete A[e][r],t.destroy())})(s,e)),.9*W[e]),r.setHandlers({connect:()=>J(r,s,e),close:()=>N(r,s)}),n(a,P({peerId:l,offer:t}))}})(t),F)));d([$,_]).then((([e,r])=>{const n=async(a,o)=>{const s=await t(a,e,r);"number"==typeof s&&(W[o]=s),z[o]=setTimeout((()=>n(a,o)),W[o])};K.forEach((async(e,r)=>{await e,n(await a[r],r)}))}));let V=m;return n[v]||={},n[v][g]=B((e=>V=e),(e=>delete S[e]),(()=>{delete n[v][g],z.forEach(clearTimeout),K.forEach((async e=>(await e)())),clearInterval(c),u(),p=!1}))}})({init:e=>((e,r,t)=>(e.relayUrls||r).slice(0,e.relayUrls?e.relayUrls.length:e.relayRedundancy||3))(e,ae).map((e=>{const r=((e,r)=>{const t={},n=()=>{const a=new WebSocket(e);a.onclose=()=>{S?S.then(n):(A[e]??=3333,setTimeout(n,A[e]),A[e]*=2)},a.onmessage=e=>r(e.data),t.socket=a,t.url=a.url,t.ready=new Promise((r=>a.onopen=()=>{r(t),A[e]=3333})),t.send=e=>{1===a.readyState&&a.send(e)}};return n(),t})(e,(e=>{const r=T(e),n=r["failure reason"],a=r["warning message"],{interval:o}=r,s=W[r.info_hash];if(n)ee(t,n,!0);else{if(a&&ee(t,a),o&&1e3*o>V[t]&&K[t][s]){const e=Math.min(1e3*o,120333);clearInterval(z[t][s]),V[t]=e,z[t][s]=setInterval(K[t][s],e)}X[r.offer_id]||(r.offer||r.answer)&&(X[r.offer_id]=!0,Q[t][s]?.(r))}})),{url:t}=r;return F[t]=r,Q[t]={},r.ready})),subscribe(e,r,t,n,a){const{url:o}=e,s=async()=>{const t=p((await a(10)).map((e=>[c(20),e])));Q[e.url][r]=a=>{if(a.offer)n(r,{offer:a.offer,peerId:a.peer_id},((t,n)=>Z(e,r,{answer:T(n).answer,offer_id:a.offer_id,to_peer_id:a.peer_id})));else if(a.answer){const e=t[a.offer_id];e&&n(r,{answer:a.answer,peerId:a.peer_id,peer:e.peer})}},Z(e,r,{numwant:10,offers:u(t).map((([e,{offer:r}])=>({offer_id:e,offer:r})))})};return V[o]=33333,K[o]||={},K[o][r]=s,z[o]||={},z[o][r]=setInterval(s,V[o]),s(),()=>{clearInterval(z[o][r]),delete Q[o][r],delete K[o][r]}},announce:e=>V[e.url]}),te=(ne=F,()=>p(u(ne).map((([e,r])=>[e,r.socket]))));var ne;const ae=["tracker.webtorrent.dev","tracker.openwebtorrent.com","tracker.btorrent.xyz","tracker.files.fm:7073/announce"].map((e=>"wss://"+e))},{"@parcel/transformer-js/src/esmodule-helpers.js":"XTfsy"}]},[],0,"parcelRequire55a5");