@uplink-code/uplink
Advanced tools
@@ -1,5 +0,5 @@ | ||
| var St=Object.defineProperty;var i=(s,e)=>St(s,"name",{value:e,configurable:!0});var y=(s,e)=>{for(var t in e)St(s,t,{get:e[t],enumerable:!0})};var ot={};y(ot,{address:()=>A,krypto:()=>I,packet:()=>V,socket:()=>S,transform:()=>B,transport:()=>me,util:()=>E});var S={};y(S,{Mode:()=>Rt,Peer:()=>ae,Shutdown:()=>Ot,Socket:()=>it,State:()=>l,Stream:()=>le});var E={};y(E,{compress:()=>Ee,concat:()=>re,decompress:()=>Se,iterateStream:()=>Ve,random:()=>O});function re(s){let e=s.reduce((n,a)=>n+a.length,0),t=new Uint8Array(e),r=0;for(let n of s)t.set(n,r),r+=n.length;return t}i(re,"concat");function O(){return Math.random()*4294967295>>>0}i(O,"random");async function*Ve(s){let e=s.getReader();try{for(;;){let{done:t,value:r}=await e.read();if(t)break;yield r}}finally{e.releaseLock()}}i(Ve,"iterateStream");async function Ee(s){let e=new ReadableStream({start(r){r.enqueue(s),r.close()}}).pipeThrough(new CompressionStream("deflate-raw")),t=[];for await(let r of Ve(e))t.push(r);return re(t)}i(Ee,"compress");async function Se(s){let e=new ReadableStream({start(r){r.enqueue(s),r.close()}}).pipeThrough(new DecompressionStream("deflate-raw")),t=[];for await(let r of Ve(e))t.push(r);return re(t)}i(Se,"decompress");var se=class{static{i(this,"HashMap")}map=new Map;set(e,t){this.map.set(e.hash(),t)}get(e,t){return this.map.get(e.hash())??t}has(e){return this.map.has(e.hash())}delete(e){return this.map.delete(e.hash())}};var I={};y(I,{IV_LENGTH:()=>k,decrypt:()=>Pe,deriveFlowEncryptionKey:()=>ze,encrypt:()=>_e,exportRawKey:()=>Y,generateDataKey:()=>kt,generateECDHKeyPair:()=>ie,generateECDSAKeyPair:()=>ne,generateEncryptionKey:()=>xt,generateSalt:()=>Tt,importPKCS8ECDHPrivateKey:()=>Te,importPKCS8ECDSAPrivateKey:()=>ke,importRawECDHPublicKey:()=>G,importRawECDSAPublicKey:()=>j,randomUUID:()=>dr,sha256:()=>hr,sign:()=>xe,verify:()=>Ce});async function Y(s){return new Uint8Array(await crypto.subtle.exportKey("raw",s))}i(Y,"exportRawKey");function ne(s=!1){return crypto.subtle.generateKey({name:"ECDSA",namedCurve:"P-256"},s,["sign","verify"])}i(ne,"generateECDSAKeyPair");function j(s,e=!1){return crypto.subtle.importKey("raw",s,{name:"ECDSA",namedCurve:"P-256"},e,["verify"])}i(j,"importRawECDSAPublicKey");function ke(s,e=!1){return crypto.subtle.importKey("pkcs8",s,{name:"ECDSA",namedCurve:"P-256"},e,["sign"])}i(ke,"importPKCS8ECDSAPrivateKey");function G(s,e=!1){return crypto.subtle.importKey("raw",s,{name:"ECDH",namedCurve:"P-256"},e,[])}i(G,"importRawECDHPublicKey");function Te(s,e=!1){return crypto.subtle.importKey("pkcs8",s,{name:"ECDH",namedCurve:"P-256"},e,["deriveBits","deriveKey"])}i(Te,"importPKCS8ECDHPrivateKey");function ie(s=!1){return crypto.subtle.generateKey({name:"ECDH",namedCurve:"P-256"},s,["deriveBits","deriveKey"])}i(ie,"generateECDHKeyPair");function kt(s,e){return crypto.subtle.deriveKey({name:"ECDH",public:e},s,{name:"HKDF",hash:"SHA-512"},!1,["deriveBits","deriveKey"])}i(kt,"generateDataKey");function Tt(s,e){return crypto.subtle.deriveBits({name:"HKDF",hash:"SHA-512",salt:new ArrayBuffer,info:e},s,512)}i(Tt,"generateSalt");function xt(s,e,t=!1){return crypto.subtle.deriveKey({name:"HKDF",hash:"SHA-512",salt:new ArrayBuffer,info:e},s,{name:"AES-CBC",length:256},t,["encrypt","decrypt"])}i(xt,"generateEncryptionKey");function xe(s,e){return crypto.subtle.sign({name:"ECDSA",hash:"SHA-256"},s,e)}i(xe,"sign");function Ce(s,e,t){return crypto.subtle.verify({name:"ECDSA",hash:"SHA-256"},s,e,t)}i(Ce,"verify");var k=16;async function _e(s,e){let t=new Uint8Array(k);crypto.getRandomValues(t);let r=await crypto.subtle.encrypt({name:"AES-CBC",iv:t},s,e);return{iv:t,ciphertext:r}}i(_e,"encrypt");function Pe(s,e,t){return crypto.subtle.decrypt({name:"AES-CBC",iv:e},s,t)}i(Pe,"decrypt");async function ze(s,e,t,r,n=!1){let a=await kt(s,e),o=new ArrayBuffer(8),u=new DataView(o);u.setUint32(0,t),u.setUint32(4,r);let c=await Tt(a,o);return xt(a,c,n)}i(ze,"deriveFlowEncryptionKey");async function hr(s){return new Uint8Array(await crypto.subtle.digest("SHA-256",new TextEncoder().encode(s)))}i(hr,"sha256");function dr(){return crypto.randomUUID()}i(dr,"randomUUID");var ae=class s{static{i(this,"Peer")}address;ecdsa;seen;constructor(e,t,r=Date.now()){this.address=e,this.ecdsa=t,this.seen=r}update(){this.seen=Date.now()}hash(){return this.address.address}static async from(e){return new s(e.from,await j(e.payload))}};var U=class{static{i(this,"Emitter")}listeners=new Map;on(e,t){let r=this.listeners.get(e)??[];r.push(t),this.listeners.set(e,r)}off(e,t){let r=this.listeners.get(e);r&&this.listeners.set(e,r.filter(n=>n!==t))}emit(e,...t){for(let r of this.listeners.get(e)??[])r(...t)}};var A={};y(A,{ADDRESS_BROADCAST_MASK:()=>_,ADDRESS_TYPE_MASK:()=>Xe,Address:()=>w,Type:()=>Le,from:()=>pr,generate:()=>mr});var Le=(a=>(a[a.RELAY=0]="RELAY",a[a.CLIENT=268435456]="CLIENT",a[a.WORKER=536870912]="WORKER",a[a.SERVICE=805306368]="SERVICE",a[a.ALL=4294967295]="ALL",a))(Le||{}),Xe=4026531840,_=268435455,w=class s{constructor(e){this.address=e}static{i(this,"Address")}static BROADCAST=s.from(4294967295);static RELAY_BROADCAST=s.from(0|_);static CLIENT_BROADCAST=s.from(268435456|_);static WORKER_BROADCAST=s.from(536870912|_);static SERVICE_BROADCAST=s.from(805306368|_);hash(){return this.address}static from(e){return new s(e)}static generate(e){let t;do t=new s((O()&_|e)>>>0);while(s.isBroadcast(t.address));return t}static isBroadcast(e){return(e&_)===_}isBroadcast(){return s.isBroadcast(this.address)}type(){return(this.address&Xe)>>>0}broadcast(){return(this.address|_)>>>0}match(e,t=!0){return this.address===e.address||t&&(this.broadcast()===e.address||e.address===4294967295)}toString(){return`${Le[(this.address&Xe)>>>0]??Le[this.address]??"UNK"} <${this.address.toString(16).padStart(8,"0")}>`}};function pr(s){return w.from(s)}i(pr,"from");function mr(s){return w.generate(s)}i(mr,"generate");var V={};y(V,{Flag:()=>fe,Offset:()=>_t,PKT_DEFAULT_MSS:()=>Ct,PKT_HEADER_LEN:()=>T,PKT_MAGIC:()=>oe,PKT_OVERHEAD_MAX:()=>Oe,PKT_SIGNATURE_LEN:()=>ue,PacketCopy:()=>Ze,PacketZero:()=>ce,Type:()=>et,create:()=>v,decode:()=>tt,packetize:()=>rt});var oe=85,Ct=1024,et=(r=>(r[r.ANNOUNCE=0]="ANNOUNCE",r[r.DISCOVER=1]="DISCOVER",r[r.DISONNECT=2]="DISONNECT",r))(et||{}),fe=(d=>(d[d.NOP=0]="NOP",d[d.FIN=1]="FIN",d[d.SYN=2]="SYN",d[d.RST=4]="RST",d[d.PSH=8]="PSH",d[d.ACK=16]="ACK",d[d.CTL=32]="CTL",d[d.ENC=64]="ENC",d[d.CMP=128]="CMP",d[d.ALL=255]="ALL",d))(fe||{}),_t=(h=>(h[h.MAGIC=0]="MAGIC",h[h.VERSION=1]="VERSION",h[h.TYPE=2]="TYPE",h[h.FLAGS=3]="FLAGS",h[h.SEQUENCE=4]="SEQUENCE",h[h.ACK=8]="ACK",h[h.FLOW=12]="FLOW",h[h.TO=16]="TO",h[h.FROM=20]="FROM",h[h.SIGNATURE=24]="SIGNATURE",h[h.PAYLOAD=88]="PAYLOAD",h))(_t||{}),T=88,ue=64,Oe=T+k+16,Re=new Uint8Array(ue),ce=class s{static{i(this,"PacketZero")}data;view;_magic;_version;_type;_flags;_sequence;_ack;_flow;_to;_from;_signature;_payload;constructor(e){e.buffer?(this.data=e.buffer,this.view=new DataView(this.data.buffer,e.buffer.byteOffset,e.buffer.byteLength)):(this.data=new Uint8Array(T+(e.payload?.byteLength??0)),this.view=new DataView(this.data.buffer),this.view.setUint8(0,oe),e.version&&(this.version=e.version),e.type&&(this.type=e.type),e.flags&&(this.flags=e.flags),e.sequence&&(this.sequence=e.sequence),e.ack&&(this.ack=e.ack),e.flow&&(this.flow=e.flow),e.to&&(this.to=e.to),e.from&&(this.from=e.from),e.signature&&this.data.set(e.signature,24),e.payload&&this.copy(e.payload))}get magic(){return this._magic?this._magic:this._magic=this.view.getUint8(0)}get version(){return this._version?this._version:this._version=this.view.getUint8(1)}set version(e){this._version=e,this.view.setUint8(1,e)}get type(){return this._type?this._type:this._type=this.view.getUint8(2)}set type(e){this._type=e,this.view.setUint8(2,e)}get flags(){return this._flags?this._flags:this._flags=this.view.getUint8(3)}set flags(e){this._flags=e,this.view.setUint8(3,e)}get sequence(){return this._sequence?this._sequence:this._sequence=this.view.getUint32(4)}set sequence(e){this._sequence=e,this.view.setUint32(4,e)}get ack(){return this._ack?this._ack:this._ack=this.view.getUint32(8)}set ack(e){this._ack=e,this.view.setUint32(8,e)}set flow(e){this._flow=e,this.view.setUint32(12,e)}get flow(){return this._flow?this._flow:this._flow=this.view.getUint32(12)}get to(){return this._to?w.from(this._to):w.from(this._to=this.view.getUint32(16))}set to(e){this._to=e.address,this.view.setUint32(16,this._to)}get from(){return this._from?w.from(this._from):w.from(this._from=this.view.getUint32(20))}set from(e){this._from=e.address,this.view.setUint32(20,this._from)}get signature(){return this._signature?this._signature:this._signature=this.data.subarray(24,24+ue)}set signature(e){this._signature=e}get payload(){return this._payload?this._payload:this._payload=this.data.subarray(88)}set payload(e){this._payload=e}resize(e){let t=T+e,r=new Uint8Array(t),n=t>this.data.byteLength?this.data.byteLength:t;r.set(this.data.subarray(0,n)),this.data=r,this.view=new DataView(this.data.buffer)}copy(e){this.data.set(e,T),this._payload=this.data.subarray(T)}async compress(){let e=await Ee(this.payload);e.byteLength>=this.payload.byteLength||(this.flags|=128,this.payload=e)}async decompress(){this.flags&128&&(this.payload=await Se(this.payload),this.flags&=-129)}async encrypt(e){let{iv:t,ciphertext:r}=await _e(e,this.payload),n=new Uint8Array(t.byteLength+r.byteLength);n.set(t,0),n.set(new Uint8Array(r),k),this.flags|=64,this.payload=n}async decrypt(e){if(!(this.flags&64))return;let t=this.payload.subarray(0,k),r=this.payload.subarray(k);this.flags&=-65,this.payload=new Uint8Array(await Pe(e,t,r))}async sign(e){return this.signature=Re,this.signature=new Uint8Array(await xe(e,this.encode()))}async verify(...e){let t=new Uint8Array(this.signature);this.signature=Re;let r=!1;for(let n of e)if(r=await Ce(n,t,this.encode()),r)break;return this.signature=t,r}encode(){return this._payload&&this._payload.buffer!=this.data.buffer&&(this.resize(this._payload.byteLength),this.copy(this.payload)),this._signature&&this._signature.buffer!=this.data.buffer&&(this.data.set(this._signature,24),this._signature=this.data.subarray(24,24+ue)),this.data}static decode(e){if(e.byteLength<T)return null;let t=new s({buffer:e});return t.magic!==oe?null:t}},Je=class{static{i(this,"Decoder")}view;offset;constructor(e){this.view=new DataView(e),this.offset=0}uint8(){return this.view.getUint8(this.offset++)}uint32(){let e=this.view.getUint32(this.offset);return this.offset+=4,e}uint8array(e){let t=new Uint8Array(this.view.buffer,this.offset,e);return this.offset+=e,t}},Qe=class{static{i(this,"Encoder")}view;offset;constructor(e){this.view=new DataView(e),this.offset=0}uint8(e){this.view.setUint8(this.offset++,e)}uint32(e){this.view.setUint32(this.offset,e),this.offset+=4}uint8array(e){new Uint8Array(this.view.buffer,this.offset).set(e),this.offset+=e.byteLength}},Ze=class s{static{i(this,"PacketCopy")}version;type;flags;sequence;ack;flow;to;from;signature;payload;constructor(e){this.version=e?.version??0,this.type=e?.type??0,this.flags=e?.flags??0,this.sequence=e?.sequence??0,this.ack=e?.ack??0,this.flow=e?.flow??0,this.to=e?.to??w.from(0),this.from=e?.from??w.from(0),this.signature=e?.payload??new Uint8Array,this.payload=e?.payload??new Uint8Array}async compress(){let e=await Ee(this.payload);e.byteLength>=this.payload.byteLength||(this.flags|=128,this.payload=e)}async decompress(){this.flags&128&&(this.payload=await Se(this.payload),this.flags&=-129)}async encrypt(e){let{iv:t,ciphertext:r}=await _e(e,this.payload),n=new Uint8Array(t.byteLength+r.byteLength);n.set(t,0),n.set(new Uint8Array(r),k),this.payload=n}async decrypt(e){let t=this.payload.subarray(0,k),r=this.payload.subarray(k);this.payload=new Uint8Array(await Pe(e,t,r))}async sign(e){return this.signature=Re,this.signature=new Uint8Array(await xe(e,this.encode()))}async verify(...e){let t=new Uint8Array(this.signature);this.signature=Re;let r=!1;for(let n of e)if(r=await Ce(n,t,this.encode()),r)break;return this.signature=t,r}encode(){let e=new Uint8Array(T+this.payload.byteLength),t=new Qe(e.buffer);return t.uint8(oe),t.uint8(this.version),t.uint8(this.type),t.uint8(this.flags),t.uint32(this.sequence),t.uint32(this.ack),t.uint32(this.flow),t.uint32(this.to.address),t.uint32(this.from.address),t.uint8array(this.signature),t.uint8array(this.payload),e}static decode(e){let t=e.buffer,r=new Je(t),n=new s;return t.byteLength<T||r.uint8()!=oe||(n.version=r.uint8(),n.type=r.uint8(),n.flags=r.uint8(),n.sequence=r.uint32(),n.ack=r.uint32(),n.flow=r.uint32(),n.to=w.from(r.uint32()),n.from=w.from(r.uint32()),n.signature=r.uint8array(ue),n.payload=new Uint8Array(t,r.offset),r.offset!=T)?null:n}};function v(s){return new ce(s)}i(v,"create");function tt(s){return ce.decode(s)}i(tt,"decode");function*rt(s,e){let t=e?.limit??Ct,r=Math.floor(s.byteLength/t),n=s.byteLength%t;s.byteLength===0&&(yield v({...e?.header}));let a=0;for(;a<r;++a){let o=a*t;yield v({...e?.header,payload:s.subarray(o,o+t)})}if(n){let o=a*t;yield v({...e?.header,payload:s.subarray(o,o+n)})}}i(rt,"packetize");function Lt(s,e){return s-e>>>0>=2147483648}i(Lt,"LT");function Pt(s,e){return!Lt(e,s)}i(Pt,"LTE");var l={CLOSED:0,LISTEN:1,SYN_SENT:2,SYN_RECV:3,ESTABLISHED:4,CLOSE_WAIT:5,FIN_WAIT:6,FIN_WAIT_2:7,LAST_ACK:8,CLOSING:9,TIMED_OUT:10,TIME_WAIT:11},Rt=(r=>(r[r.NONE=0]="NONE",r[r.READ=1]="READ",r[r.WRITE=2]="WRITE",r))(Rt||{}),Ot=(r=>(r[r.READ=0]="READ",r[r.WRITE=1]="WRITE",r[r.RDWR=2]="RDWR",r))(Ot||{}),le=class extends U{static{i(this,"Stream")}ACK_DELAY=200;ACK_FREQUENCY=2;LAST_ACK_TIMEOUT=3e4;FIN_WAIT_2_TIMEOUT=3e4;RETRANSMIT_TIMEOUT=3e3;RETRANSMIT_LIMIT=5;RETRANSMIT_ENABLED=!0;MAX_CHUNK_SIZE=1024;TIME_WAIT_DELAY=100;canceled=!1;controller;readable=new ReadableStream({start:i(e=>this.controller=e,"start"),cancel:i(()=>{this.canceled=!0},"cancel")});expected=0;unacked=0;duplicates=new Map;pending=[];interval;timer;header;stats;ecdh;skey;rkey;mode=3;state=l.CLOSED;exportable=!1;output;to;from;flow;constructor(e,t,r,n,a){super(),this.output=e,this.to=t,this.from=r,this.flow=n,a&&(this.exportable=a.danger?.exportable??this.exportable,this.skey=a.danger?.key??this.skey,this.rkey=a.danger?.key??this.rkey,this.MAX_CHUNK_SIZE=a.maxChunkSize??this.MAX_CHUNK_SIZE,this.ACK_DELAY=a.ackDelay??this.ACK_DELAY,this.ACK_FREQUENCY=a.ackFrequency??this.ACK_FREQUENCY,this.RETRANSMIT_LIMIT=a.retransmit?.limit??this.RETRANSMIT_LIMIT,this.RETRANSMIT_TIMEOUT=a.retransmit?.timeout??this.RETRANSMIT_TIMEOUT,this.RETRANSMIT_ENABLED=a.retransmit?.enabled??this.RETRANSMIT_ENABLED),this.interval=setInterval(()=>{this.tick()},this.ACK_DELAY),this.header={version:0,type:0,flags:0,to:this.to,from:w.from(0),flow:this.flow,sequence:0,ack:0},this.stats={retransmits:0,acks:0,piggybacks:0,ooo:0,received:0,transmitted:0}}async init(e){e?this.ecdh=e:this.ecdh=await ie()}async deriveEncryptionKey(e,t){let r=await G(e.payload);return ze(this.ecdh.privateKey,r,e.flow,t.address,this.exportable)}tick(){switch(this.state){case l.TIMED_OUT:case l.CLOSED:break;default:this.ack(),this.retransmit()}}async establish(){if(!(l.ESTABLISHED<=this.state))return l.CLOSED===this.state&&(this.transition(l.SYN_SENT),this.syn()),new Promise(e=>{let t=i(r=>{l.ESTABLISHED<=r&&(this.off("transition",t),this.emit("established"),e())},"listener");this.on("transition",t)})}async read(e){let t=[],r=this.readable.getReader();e?.timeout&&setTimeout(()=>{r.releaseLock()},e.timeout);try{do{let n=await r.read();if(n.done)break;let a=n.value;if(a.flags&34)continue;let o=a.payload.byteLength;if(o&&t.push(a.payload),a.flags&9||!e?.push&&o)break}while(!0)}catch(n){throw n?.name==="TypeError"?new Error("TIMEOUT",{cause:n}):n}finally{r.releaseLock()}return re(t)}async send(e,t){if(!(this.mode&2))throw new Error(`Writing to RO Stream ${this.mode}`);await this.establish(),await this.write(rt(e,{header:this.header,limit:this.MAX_CHUNK_SIZE}),t)}async write(e,t){let r=e[Symbol.iterator](),n=r.next(),a=r.next(),o=t?.compress??!0;for(;!n.done;){let u=n.value;a.done&&t?.push&&(u.flags|=8),o&&await u.compress(),this.skey&&await u.encrypt(this.skey),this.header.ack!==this.expected&&(u.flags|=16,this.header.ack=this.expected,++this.stats.piggybacks),u.ack=this.header.ack,this.transmit(u),n=a,a=r.next()}}transmit(e,t=!0,r=!0,n=!0){n&&(e.from=this.from,e.sequence=this.header.sequence),this.stats.transmitted+=e.payload.byteLength,t&&this.pending.push({time:Date.now(),attempts:0,packet:e}),r&&(this.header.sequence=this.header.sequence+e.payload.byteLength+1>>>0),this.output(e)}processAck(e){if(!this.pending.length)return;let t=this.duplicates.get(e.ack)??0,r=this.pending.findLastIndex(a=>Lt(a.packet.sequence,e.ack));if(this.pending.splice(0,r+1).length)this.duplicates.clear();else{let a=t+1;this.duplicates.set(e.ack,a),a>=3&&this.retransmit(!0)}}async processPacket(e){let t=e.payload.byteLength;this.stats.received+=t;let r=!1;if(this.expected===e.sequence){let n=e.flags&3;(t||n)&&(this.expected=this.expected+t+1>>>0,!n&&++this.unacked>=this.ACK_FREQUENCY&&this.ack()),this.rkey&&await e.decrypt(this.rkey),await e.decompress(),this.canceled||this.controller.enqueue(e),r=!0}else++this.stats.ooo;return r}async consume(e){let t=e.flags&16;switch(e.flags&4&&this.transition(l.CLOSED),this.state){case l.SYN_SENT:{if(t&&e.flags&2){let r=await this.processPacket(e);this.processAck(e),r&&(this.skey||(this.skey=await this.deriveEncryptionKey(e,this.from),this.rkey=await this.deriveEncryptionKey(e,this.to)),this.transition(l.ESTABLISHED),this.ack(!0))}break}case l.LISTEN:{e.flags&2&&!t&&await this.processPacket(e)&&(this.skey||(this.skey=await this.deriveEncryptionKey(e,this.from),this.rkey=await this.deriveEncryptionKey(e,this.to)),this.transition(l.SYN_RECV),this.syn(16));break}case l.SYN_RECV:{t&&(this.processAck(e),await this.processPacket(e)&&this.transition(l.ESTABLISHED));break}case l.ESTABLISHED:{t&&this.processAck(e),await this.processPacket(e)&&e.flags&1&&(this.transition(l.CLOSE_WAIT),this.ack(!0));break}case l.CLOSE_WAIT:t&&this.processAck(e);break;case l.CLOSING:case l.LAST_ACK:{t&&(this.processAck(e),await this.processPacket(e),Pt(this.header.sequence,e.ack)&&this.transition(l.CLOSED));break}case l.FIN_WAIT:{t&&this.processAck(e),await this.processPacket(e)&&(e.flags&1&&(this.transition(l.CLOSING),this.ack(!0)),t&&Pt(this.header.sequence,e.ack)&&this.transition(l.FIN_WAIT_2));break}case l.FIN_WAIT_2:{t&&this.processAck(e),await this.processPacket(e)&&e.flags&1&&(this.ack(!0),this.transition(l.TIME_WAIT));break}}}retransmit(e=!1){if(this.RETRANSMIT_ENABLED)for(let t of this.pending){let r=Date.now();if(e||r-t.time>this.RETRANSMIT_TIMEOUT){if(t.time=r,++t.attempts,t.attempts>this.RETRANSMIT_LIMIT){this.transition(l.TIMED_OUT);break}++this.stats.retransmits,this.transmit(t.packet,!1,!1,!1)}}}syn(e){Y(this.ecdh.publicKey).then(t=>{let r=v({...this.header,flags:2|(e??0),payload:t});r.flags&16&&(r.ack=this.header.ack=this.expected),this.transmit(r)}).catch(t=>{throw t})}ack(e=!1,t){if(this.header.ack==this.expected&&!e)return;this.header.ack=this.expected,this.unacked=0;let r=v({...this.header,flags:16|(t??0)});++this.stats.acks,this.transmit(r,!1,!1)}fin(e){let t=v({...this.header,flags:1|(e??0)});this.transmit(t)}shutdown(e=1){switch(e){default:case 1:this.mode=1,this.transition(l.FIN_WAIT),this.fin();break;case 0:this.mode=2;break;case 2:this.mode=0,this.fin(),this.transition(l.CLOSED);break}}transition(e){let t=this.state,r=i(()=>{clearInterval(this.interval),clearTimeout(this.timer),this.emit("closed")},"clear");switch(e){case l.CLOSING:clearTimeout(this.timer),this.timer=setTimeout(()=>{this.transition(l.TIME_WAIT)},this.LAST_ACK_TIMEOUT);break;case l.LAST_ACK:clearTimeout(this.timer),this.timer=setTimeout(()=>{this.transition(l.CLOSED)},this.LAST_ACK_TIMEOUT);break;case l.TIME_WAIT:clearTimeout(this.timer),this.timer=setTimeout(()=>{this.transition(l.CLOSED)},this.TIME_WAIT_DELAY);break;case l.TIMED_OUT:this.controller.error("TIMEOUT"),r();break;case l.CLOSED:if(l.CLOSED===t)break;this.canceled||this.controller.close(),this.canceled=!0,r();break}this.state=e,this.emit("transition",e,t)}listen(){this.transition(l.LISTEN)}async close(){let e=new Promise(t=>{l.CLOSED===this.state&&t();let r=i(()=>{t(),this.off("closed",r)},"listener");this.on("closed",r)});switch(this.state){case l.LAST_ACK:case l.FIN_WAIT_2:case l.FIN_WAIT:case l.TIMED_OUT:case l.TIME_WAIT:case l.CLOSED:break;case l.CLOSE_WAIT:this.transition(l.LAST_ACK),this.fin();break;case l.SYN_RECV:case l.ESTABLISHED:this.shutdown();break;case l.SYN_SENT:case l.LISTEN:default:this.transition(l.CLOSED);break}return e}};var B={};y(B,{decoder:()=>pe,encoder:()=>de,signer:()=>he,unwrap:()=>st,unwrapLengthPrefix:()=>nt});var he={};y(he,{Signer:()=>Ie,transform:()=>yr});var Ie=class{static{i(this,"Signer")}secret;constructor(e){this.secret=e}async transform(e,t){await e.sign(this.secret),t.enqueue(e)}};function yr(s){return new TransformStream(new Ie(s))}i(yr,"transform");var de={};y(de,{PacketToUint8Array:()=>Ue,transform:()=>wr});var Ue=class{static{i(this,"PacketToUint8Array")}transform(e,t){t.enqueue(e.encode())}};function wr(){return new TransformStream(new Ue)}i(wr,"transform");var pe={};y(pe,{Uint8ArrayToPacket:()=>De,transform:()=>gr});var De=class{static{i(this,"Uint8ArrayToPacket")}transform(e,t){let r=tt(e);if(!r){t.error("Invalid Packet Encoding");return}t.enqueue(r)}};function gr(){return new TransformStream(new De)}i(gr,"transform");var st={};y(st,{Unwrap:()=>Ke,transform:()=>Ar});var Ke=class{static{i(this,"Unwrap")}transform(e,t){e.flags&34||(e.payload.byteLength&&t.enqueue(e.payload),e.flags&1&&t.terminate())}};function Ar(){return new TransformStream(new Ke)}i(Ar,"transform");var nt={};y(nt,{LENGTH_BYTES:()=>vr,UnwrapLengthPrefix:()=>Ne,transform:()=>br});var vr=4,Ne=class{static{i(this,"UnwrapLengthPrefix")}buffer=new Uint8Array(0);maxMessageSize=-1>>>0;constructor(e){this.maxMessageSize=e??this.maxMessageSize}transform(e,t){let r=new Uint8Array(this.buffer.length+e.length);r.set(this.buffer),r.set(e,this.buffer.length),this.buffer=r;let n=0;for(;n+4<=this.buffer.length;){let o=new DataView(this.buffer.buffer,this.buffer.byteOffset,this.buffer.byteLength).getUint32(n,!1);if(o>this.maxMessageSize){t.error(new Error(`Data length ${o} too large`));return}let u=4+o;if(n+u<=this.buffer.length){let c=this.buffer.slice(n+4,n+u);t.enqueue(c),n+=u}else break}n>0&&(this.buffer=this.buffer.subarray(n))}flush(e){this.buffer.length>0&&e.error(new Error(`Incomplete message remaining at stream end: ${this.buffer.length} bytes`))}};function br(s){return new TransformStream(new Ne(s))}i(br,"transform");var it=class extends U{static{i(this,"Socket")}ANNOUNCE_PERIOD=5e3;PEER_EXPIRATION=this.ANNOUNCE_PERIOD*5;peers=new se;transport;writer;substreams=new se;ecdsa;exportedPub;timer;trusted=[];closed=!1;canceled=!1;streamKey;ecdh;handler;address;constructor(e=async r=>{await r.readable.pipeTo(new WritableStream)},t=w.from(0)){super(),this.handler=e,this.address=t}async init(e,t){if(e.MAX_CHUNK_SIZE<=Oe)throw new Error(`Transport MAX_CHUNK_SIZE too small to fit overhead: ${e.MAX_CHUNK_SIZE} <= ${Oe}`);if(this.streamKey=t?.keys?.danger?.streamKey,this.ecdh=t?.keys?.danger?.ecdh,t?.keys?.ecdsa?this.ecdsa=t.keys.ecdsa:this.ecdsa=await ne(t?.keys?.danger?.exportable??!1),t?.keys?.trusted)for(let r of t.keys.trusted)this.trusted.push(await Y(r));this.exportedPub=await Y(this.ecdsa.publicKey),this.transport=e,this.transport.readable=e.readable.pipeThrough(pe.transform()),this.transport.writable=e.writable,this.transport.readable.pipeTo(new WritableStream({write:i(async r=>{await this.consume(r)},"write"),abort:i(async()=>{await this.close()},"abort"),close:i(async()=>{await this.close()},"close")})).catch(r=>{console.error("SOCKET PIPETO ERROR",r)}),new ReadableStream({start:i(r=>{this.writer=r},"start"),cancel:i(r=>{this.canceled=!0,console.log("SOCKET READABLE CANCEL",r)},"cancel")}).pipeThrough(he.transform(this.ecdsa.privateKey)).pipeThrough(de.transform()).pipeTo(this.transport.writable).catch(r=>{console.error(r)}),this.timer=setInterval(()=>{this.tick()},this.ANNOUNCE_PERIOD),this.announce()}tick(){this.announce(),this.expirePeers()}enqueue(e){!this.canceled&&!this.closed&&this.writer.enqueue(e)}announce(e=w.BROADCAST){let t=v({flags:32,type:0,sequence:Date.now()/1e3>>>0,ack:O(),to:e,from:this.address,payload:this.exportedPub});this.enqueue(t)}discover(e=w.BROADCAST){let t=v({flags:32,type:1,sequence:Date.now()/1e3>>>0,ack:O(),to:e,from:this.address});this.enqueue(t)}disconnect(e=w.BROADCAST){let t=v({flags:32,type:2,sequence:Date.now()/1e3>>>0,ack:O(),to:e,from:this.address});this.enqueue(t)}rst(e,t){let r=v({flags:4,sequence:Date.now()/1e3>>>0,ack:0,to:e,from:this.address,flow:t});this.enqueue(r)}substream(e,t,r=this.address){let n=this.substreams.get(e)??new Map;if(t===void 0)do t=O();while(n.has(t));let a=new le(o=>{this.enqueue(o)},e,r,t,{maxChunkSize:this.transport.MAX_CHUNK_SIZE,danger:{key:this.streamKey}});return a.on("closed",()=>this.remove(e,t)),n.set(t,a),this.substreams.set(e,n),a.init(this.ecdh).then(()=>a)}async addPeer(e){let t=this.peers.get(e.from);if(t)await e.verify(t.ecdsa)&&t.update();else if(t=await ae.from(e),await e.verify(t.ecdsa)){if(this.trusted.length){let r=!1,n=e.payload;for(let a of this.trusted)if(a.every((o,u)=>o===n[u])){r=!0;break}if(!r)return}this.peers.set(e.from,t),this.emit("peer",t)}}expirePeers(){for(let e of this.peers.map.values())Date.now()-e.seen>this.PEER_EXPIRATION&&(this.peers.delete(e.address),this.emit("peergone",e,!0))}remove(e,t){return this.substreams.get(e)?.delete(t)}async verify(e){let t=this.peers.get(e.from);return!(!t||!await e.verify(t.ecdsa))}async consume(e){if(!this.address.match(e.to))return;if(e.flags&32){switch(e.type){case 0:await this.addPeer(e);break;case 1:await this.verify(e)&&this.announce(e.from);break;case 2:{let a=this.peers.get(e.from);if(a){if(!await e.verify(a.ecdsa))return;a.update(),this.emit("peergone",a,!1),this.peers.delete(e.from)}break}}return}if(!await this.verify(e))return;let r=(this.substreams.get(e.from)??new Map).get(e.flow),n=e.flags&2&&!(e.flags&16);!r&&n?(r=await this.substream(e.from,e.flow,this.address),r.listen(),this.handler?.call(this,r)):!r&&!(e.flags&4)&&this.rst(e.from,e.flow),await r?.consume(e)}async close(){if(!this.closed){for(let e of this.substreams.map.values()){for(let t of e.values())await t.close();e.clear()}this.substreams.map.clear(),this.disconnect(),this.closed=!0,this.writer.close(),clearInterval(this.timer)}}};var me={};y(me,{ws:()=>at});var at={};y(at,{WebSocketTransport:()=>Me,create:()=>Er});var Me=class{static{i(this,"WebSocketTransport")}MAX_CHUNK_SIZE=65536;readable;writable;writer;reader;closed=!1;reconnect=!0;ws;factory;constructor(e,t){this.factory=e,this.reconnect=t?.reconnect??this.reconnect,this.readable=new ReadableStream({start:i(r=>{this.writer=r},"start"),cancel:i(()=>{this.closed=!0},"cancel")}),this.writable=new WritableStream({start:i(r=>{this.reader=r},"start"),write:i(async r=>{if(WebSocket.OPEN===this.ws.readyState){this.ws.send(r);return}if(WebSocket.CLOSING!==this.ws.readyState){if(WebSocket.CLOSED===this.ws.readyState&&!this.closed){this.reconnect&&await this.connect(!0);return}await new Promise(n=>{this.ws.addEventListener("error",()=>{n()},{once:!0}),this.ws.addEventListener("open",()=>{this.ws.send(r),n()},{once:!0})})}},"write"),abort:i(()=>{this.closed=!0},"abort")})}async connect(e=!1){this.ws=await this.factory(),this.ws.binaryType="arraybuffer",this.ws.addEventListener("message",t=>{let r=t.data;this.closed||(r instanceof ArrayBuffer?this.writer.enqueue(new Uint8Array(r)):r instanceof Blob?r.arrayBuffer().then(n=>{this.writer.enqueue(new Uint8Array(n))}).catch(n=>{throw n}):this.writer.enqueue(new TextEncoder().encode(r)))}),this.ws.addEventListener("error",()=>{}),this.ws.addEventListener("close",t=>{try{(t.wasClean||!this.reconnect)&&(this.closed||this.writer.close(),this.closed=!0)}catch(r){console.error("WEBSOCKET CLOSING EXCEPTION",r)}})}async close(){this.ws.close()}};function Er(s,e){return new Me(s,e)}i(Er,"create");var Kt={};y(Kt,{ErrorMessage:()=>we,Message:()=>P,RequestMessage:()=>ye,ResponseMessage:()=>F,Result:()=>D,URPC:()=>K,URPCError:()=>b,decode:()=>xr,default:()=>Cr});var ut={};y(ut,{URPC:()=>K,URPCError:()=>b});function It(s){let e=s.reduce((n,a)=>n+a.length,0),t=new Uint8Array(e),r=0;for(let n of s)t.set(n,r),r+=n.length;return t}i(It,"concat");async function Ut(s){let e=new ReadableStream({start(r){r.enqueue(s),r.close()}}).pipeThrough(new CompressionStream("deflate-raw")),t=[];for await(let r of E.iterateStream(e))t.push(r);return It(t)}i(Ut,"compress");async function Dt(s){let e=new ReadableStream({start(r){r.enqueue(s),r.close()}}).pipeThrough(new DecompressionStream("deflate-raw")),t=[];for await(let r of E.iterateStream(e))t.push(r);return It(t)}i(Dt,"decompress");function z(s){let e=new TextDecoder().decode(s);return e==="undefined"&&(e="null"),e&&JSON.parse(e)}i(z,"decode");function Be(s){return new TextEncoder().encode(JSON.stringify(s))}i(Be,"encode");var P=class s{static{i(this,"Message")}version=0;method;params;error;result;constructor(e,t,r,n){this.method=e,this.params=t,this.error=r,this.result=n}async encode(){let e={version:this.version,method:this.method,params:this.params,error:this.error,result:this.result?this.result:void 0};return Ut(Be(e))}static async decode(e){let t=z(await Dt(e));return new s(t.method,t.params,t.error,t.result?t.result:void 0)}},ye=class extends P{static{i(this,"RequestMessage")}method;params;constructor(e,t){super(e,t,void 0,void 0),this.method=e,this.params=t}},F=class extends P{static{i(this,"ResponseMessage")}constructor(e){super(void 0,void 0,void 0,new TextDecoder().decode(e))}},we=class extends P{static{i(this,"ErrorMessage")}error;constructor(e){super(void 0,void 0,e,void 0),this.error=e}};var D=class{constructor(e,t){this.stream=e;this.result=t;this.stream=e}static{i(this,"Result")}_readable;get readable(){return this._readable??(this._readable=this.stream.readable.pipeThrough(B.unwrap.transform()))}async value({close:e=!1}={}){return e&&await this.close(),z(this.result)}async text(e,t){let r=[],n=this.readable.pipeThrough(new TextDecoderStream(e,t));for await(let a of E.iterateStream(n))r.push(a);return r.join("")}async bytes(){let e=[];for await(let t of E.iterateStream(this.readable))e.push(t);return E.concat(e)}async json(e,t){return JSON.parse(await this.text(e,t))}async close(){await this.stream.close()}};var b=class extends Error{static{i(this,"URPCError")}code;constructor(e,t,r){super(t,r),this.code=e,this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor)}},K=class{static{i(this,"URPC")}transport;socket;handlers=new Map;options;constructor(e,t,r){this.options=r,this.socket=new S.Socket(n=>this.handle(n),t),this.transport=e}async init(){await this.socket.init(this.transport,{keys:{...this.options?.keys,danger:{ecdh:this.options?.keys?.ecdh,...this.options?.keys?.danger}}})}register(e,t){this.handlers.set(e,t)}invoke(e,t,r){let n=this.handlers.get(e);if(!n)throw new b(-32601,"Method Not Found");return n(r,...t)}async handle(e){let t=await e.read({push:!0,timeout:0}),r=await P.decode(t);try{if(!r)throw new b(-32700,"Parse error");if(!r.method)throw new b(-32601,"Method not found");if(!r.params)throw new b(-32602,"Invalid parameters");let n=await this.invoke(r.method,r.params,e.readable.pipeThrough(B.unwrap.transform())),a=n.getReader(),{done:o,value:u}=await a.read();if(a.releaseLock(),o)throw new b(-32603,"Internal error: INCOMPLETE");let c=new F(u);await e.send(await c.encode(),{push:!0});for await(let f of E.iterateStream(n))await e.send(f,{push:!1})}catch(n){let a=-1,o=n.message;n instanceof b&&(a=n.code);let u=new we({code:a,message:o});await e.send(await u.encode(),{push:!0})}finally{await e.close()}}async call(e,t,r,n){let a=n?.timeout??0,o=await this.socket.substream(e),u=new ye(t,r);return await o.send(await u.encode(),{push:!0}),n?.stream&&n.stream.pipeTo(new WritableStream({async write(c){await o.send(c)},close(){o.shutdown()}})).catch(c=>{console.error(c)}),this.result(o,a)}async result(e,t){let r=i(async(o,u)=>{throw await e.close(),new b(o,u)},"error"),n=await e.read({push:!0,timeout:t}).catch(()=>{});if(!n)return r(-2,"URPC Timeout");if(!n.byteLength)return r(-32603,"Internal error: EOF");let a=await P.decode(n);return a?a.error?r(a.error.code,a.error.message):a.result?new D(e,new TextEncoder().encode(a.result)):r(-32700,"Parse Error: no result"):r(-32603,"Internal error: Invalid Response")}async close(){await this.socket.close()}static encode(e){return Be(e)}static decode(e){return z(e)}};var Fe=class extends S.Stream{static{i(this,"ReplayStream")}constructor(e,t,r){super(()=>{},e,t,r,{retransmit:{enabled:!1}}),this.LAST_ACK_TIMEOUT=0}};async function Sr(s,e){let t=new Fe(s.to,s.from,s.flow);await t.init(e),t.transition(S.State.SYN_SENT),t.transmit(s,!1,!0,!1);let r=new Fe(s.from,s.to,s.flow);return await r.init(e),r.listen(),await r.consume(s),{client:t,worker:r}}i(Sr,"streams");function kr(s,e,t,r){let n,a;return s.pipeTo(new WritableStream({write:i(async o=>{o.flow===(r?.flowId??o.flow)&&(o.to.address===e.from.address?await e.consume(o):o.to.address===t.from.address&&await t.consume(o),S.State.ESTABLISHED===e.state&&(n=e.skey,a=e.rkey),n&&(t.skey=a,t.rkey=n))},"write"),close:i(()=>{for(let o of[e,t])o.canceled||(o.controller.close(),o.canceled=!0),o.state!==S.State.CLOSED&&o.transition(S.State.CLOSED)},"close")}))}i(kr,"pipe");async function Tr(s,e){let t,r=s.getReader();try{for(;;){let{done:n,value:a}=await r.read();if(n)break;if(a.flow===(e?.flowId??a.flow)&&a.flags&V.Flag.SYN&&!(a.flags&V.Flag.ACK)){t=a;break}}}finally{r.releaseLock()}return t}i(Tr,"syn");async function xr(s,e,t){let r=await Tr(s,t);if(!r)return;let{client:n,worker:a}=await Sr(r,e),o=new K({MAX_CHUNK_SIZE:-1>>>0,readable:new ReadableStream,writable:new WritableStream,close:i(async()=>{},"close"),connect:i(async()=>{},"connect")},n.from),[,u,c]=await Promise.all([kr(s,n,a,t),new Promise((f,d)=>{o.invoke=(h,g,M)=>{let lr=JSON.stringify({method:h,params:g}),bt=new D(a,new TextEncoder().encode(lr));return bt._readable=M,f(bt),Promise.resolve(new ReadableStream({async start(Et){Et.enqueue(await new F(new Uint8Array(0)).encode()),Et.close()}}))},o.handle(a).catch(d)}),o.result(n,0).catch(f=>{if(!(f instanceof b))throw f;let d=JSON.stringify({error:{code:f.code,message:f.message}});return new D(n,new TextEncoder().encode(d))})]);return{request:u,response:c}}i(xr,"decode");var Cr=ut;var ar={};y(ar,{AuthStatus:()=>nr,Page:()=>Z,types:()=>pt});function _r(s){return function(...e){var t=e.pop();return s.call(this,e,t)}}i(_r,"initialParams");var Pr=typeof queueMicrotask=="function"&&queueMicrotask,qt=typeof setImmediate=="function"&&setImmediate,Wt=typeof process=="object"&&typeof process.nextTick=="function";function Ht(s){setTimeout(s,0)}i(Ht,"fallback");function $t(s){return(e,...t)=>s(()=>e(...t))}i($t,"wrap");var ge;Pr?ge=queueMicrotask:qt?ge=setImmediate:Wt?ge=process.nextTick:ge=Ht;var Yt=$t(ge);function Lr(s){return ft(s)?function(...e){let t=e.pop(),r=s.apply(this,e);return Nt(r,t)}:_r(function(e,t){var r;try{r=s.apply(this,e)}catch(n){return t(n)}if(r&&typeof r.then=="function")return Nt(r,t);t(null,r)})}i(Lr,"asyncify");function Nt(s,e){return s.then(t=>{Mt(e,null,t)},t=>{Mt(e,t&&(t instanceof Error||t.message)?t:new Error(t))})}i(Nt,"handlePromise");function Mt(s,e,t){try{s(e,t)}catch(r){Yt(n=>{throw n},r)}}i(Mt,"invokeCallback");function ft(s){return s[Symbol.toStringTag]==="AsyncFunction"}i(ft,"isAsync");function Rr(s){return s[Symbol.toStringTag]==="AsyncGenerator"}i(Rr,"isAsyncGenerator");function Or(s){return typeof s[Symbol.asyncIterator]=="function"}i(Or,"isAsyncIterable");function m(s){if(typeof s!="function")throw new Error("expected a function");return ft(s)?Lr(s):s}i(m,"wrapAsync");function p(s,e){if(e||(e=s.length),!e)throw new Error("arity is undefined");function t(...r){return typeof r[e-1]=="function"?s.apply(this,r):new Promise((n,a)=>{r[e-1]=(o,...u)=>{if(o)return a(o);n(u.length>1?u:u[0])},s.apply(this,r)})}return i(t,"awaitable"),t}i(p,"awaitify");function jt(s){return i(function(t,...r){return p(function(a){var o=this;return s(t,(u,c)=>{m(u).apply(o,r.concat(c))},a)})},"applyEach")}i(jt,"applyEach$1");function lt(s,e,t,r){e=e||[];var n=[],a=0,o=m(t);return s(e,(u,c,f)=>{var d=a++;o(u,(h,g)=>{n[d]=g,f(h)})},u=>{r(u,n)})}i(lt,"_asyncMap");function We(s){return s&&typeof s.length=="number"&&s.length>=0&&s.length%1===0}i(We,"isArrayLike");var He={};function X(s){function e(...t){if(s!==null){var r=s;s=null,r.apply(this,t)}}return i(e,"wrapper"),Object.assign(e,s),e}i(X,"once");function Ir(s){return s[Symbol.iterator]&&s[Symbol.iterator]()}i(Ir,"getIterator");function Ur(s){var e=-1,t=s.length;return i(function(){return++e<t?{value:s[e],key:e}:null},"next")}i(Ur,"createArrayIterator");function Dr(s){var e=-1;return i(function(){var r=s.next();return r.done?null:(e++,{value:r.value,key:e})},"next")}i(Dr,"createES2015Iterator");function Kr(s){var e=s?Object.keys(s):[],t=-1,r=e.length;return i(function n(){var a=e[++t];return a==="__proto__"?n():t<r?{value:s[a],key:a}:null},"next")}i(Kr,"createObjectIterator");function Nr(s){if(We(s))return Ur(s);var e=Ir(s);return e?Dr(e):Kr(s)}i(Nr,"createIterator");function J(s){return function(...e){if(s===null)throw new Error("Callback was already called.");var t=s;s=null,t.apply(this,e)}}i(J,"onlyOnce");function Bt(s,e,t,r){let n=!1,a=!1,o=!1,u=0,c=0;function f(){u>=e||o||n||(o=!0,s.next().then(({value:g,done:M})=>{if(!(a||n)){if(o=!1,M){n=!0,u<=0&&r(null);return}u++,t(g,c,d),c++,f()}}).catch(h))}i(f,"replenish");function d(g,M){if(u-=1,!a){if(g)return h(g);if(g===!1){n=!0,a=!0;return}if(M===He||n&&u<=0)return n=!0,r(null);f()}}i(d,"iterateeCallback");function h(g){a||(o=!1,n=!0,r(g))}i(h,"handleError"),f()}i(Bt,"asyncEachOfLimit");var x=i(s=>(e,t,r)=>{if(r=X(r),s<=0)throw new RangeError("concurrency limit cannot be less than 1");if(!e)return r(null);if(Rr(e))return Bt(e,s,t,r);if(Or(e))return Bt(e[Symbol.asyncIterator](),s,t,r);var n=Nr(e),a=!1,o=!1,u=0,c=!1;function f(h,g){if(!o)if(u-=1,h)a=!0,r(h);else if(h===!1)a=!0,o=!0;else{if(g===He||a&&u<=0)return a=!0,r(null);c||d()}}i(f,"iterateeCallback");function d(){for(c=!0;u<s&&!a;){var h=n();if(h===null){a=!0,u<=0&&r(null);return}u+=1,t(h.value,h.key,J(f))}c=!1}i(d,"replenish"),d()},"eachOfLimit$2");function Mr(s,e,t,r){return x(e)(s,m(t),r)}i(Mr,"eachOfLimit");var Gt=p(Mr,4);function Br(s,e,t){t=X(t);var r=0,n=0,{length:a}=s,o=!1;a===0&&t(null);function u(c,f){c===!1&&(o=!0),o!==!0&&(c?t(c):(++n===a||f===He)&&t(null))}for(i(u,"iteratorCallback");r<a;r++)e(s[r],r,J(u))}i(Br,"eachOfArrayLike");function Fr(s,e,t){return Gt(s,1/0,e,t)}i(Fr,"eachOfGeneric");function qr(s,e,t){var r=We(s)?Br:Fr;return r(s,m(e),t)}i(qr,"eachOf");var q=p(qr,3);function Wr(s,e,t){return lt(q,s,e,t)}i(Wr,"map");var Vt=p(Wr,3),fi=jt(Vt);function Hr(s,e,t){return Gt(s,1,e,t)}i(Hr,"eachOfSeries");var Q=p(Hr,3);function $r(s,e,t){return lt(Q,s,e,t)}i($r,"mapSeries");var Yr=p($r,3),li=jt(Yr),zt=Symbol("promiseCallback");function Ft(){let s,e;function t(r,...n){if(r)return e(r);s(n.length>1?n:n[0])}return i(t,"callback"),t[zt]=new Promise((r,n)=>{s=r,e=n}),t}i(Ft,"promiseCallback");function jr(s,e,t,r){r=X(r);var n=m(t);return Q(s,(a,o,u)=>{n(e,a,(c,f)=>{e=f,u(c)})},a=>r(a,e))}i(jr,"reduce");var hi=p(jr,4);function Gr(s,e,t,r){return lt(x(e),s,t,r)}i(Gr,"mapLimit");var Xt=p(Gr,4);function Vr(s,e,t,r){var n=m(t);return Xt(s,e,(a,o)=>{n(a,(u,...c)=>u?o(u):o(u,c))},(a,o)=>{for(var u=[],c=0;c<o.length;c++)o[c]&&(u=u.concat(...o[c]));return r(a,u)})}i(Vr,"concatLimit");var Jt=p(Vr,4);function zr(s,e,t){return Jt(s,1/0,e,t)}i(zr,"concat");var di=p(zr,3);function Xr(s,e,t){return Jt(s,1,e,t)}i(Xr,"concatSeries");var pi=p(Xr,3);function L(s,e){return(t,r,n,a)=>{var o=!1,u;let c=m(n);t(r,(f,d,h)=>{c(f,(g,M)=>{if(g||g===!1)return h(g);if(s(M)&&!u)return o=!0,u=e(!0,f),h(null,He);h()})},f=>{if(f)return a(f);a(null,o?u:e(!1))})}}i(L,"_createTester");function Jr(s,e,t){return L(r=>r,(r,n)=>n)(q,s,e,t)}i(Jr,"detect");var mi=p(Jr,3);function Qr(s,e,t,r){return L(n=>n,(n,a)=>a)(x(e),s,t,r)}i(Qr,"detectLimit");var yi=p(Qr,4);function Zr(s,e,t){return L(r=>r,(r,n)=>n)(x(1),s,e,t)}i(Zr,"detectSeries");var wi=p(Zr,3);function Qt(s){return(e,...t)=>m(e)(...t,(r,...n)=>{typeof console=="object"&&(r?console.error&&console.error(r):console[s]&&n.forEach(a=>console[s](a)))})}i(Qt,"consoleFunc");var gi=Qt("dir");function es(s,e,t){t=J(t);var r=m(s),n=m(e),a;function o(c,...f){if(c)return t(c);c!==!1&&(a=f,n(...f,u))}i(o,"next");function u(c,f){if(c)return t(c);if(c!==!1){if(!f)return t(null,...a);r(o)}}return i(u,"check"),u(null,!0)}i(es,"doWhilst");var Ai=p(es,3);function Zt(s){return(e,t,r)=>s(e,r)}i(Zt,"_withoutIndex");function ts(s,e,t){return q(s,Zt(m(e)),t)}i(ts,"eachLimit$2");var vi=p(ts,3);function rs(s,e,t,r){return x(e)(s,Zt(m(t)),r)}i(rs,"eachLimit");var ss=p(rs,4);function ns(s,e,t){return ss(s,1,e,t)}i(ns,"eachSeries");var is=p(ns,3);function as(s){return ft(s)?s:function(...e){var t=e.pop(),r=!0;e.push((...n)=>{r?Yt(()=>t(...n)):t(...n)}),s.apply(this,e),r=!1}}i(as,"ensureAsync");function os(s,e,t){return L(r=>!r,r=>!r)(q,s,e,t)}i(os,"every");var bi=p(os,3);function us(s,e,t,r){return L(n=>!n,n=>!n)(x(e),s,t,r)}i(us,"everyLimit");var Ei=p(us,4);function cs(s,e,t){return L(r=>!r,r=>!r)(Q,s,e,t)}i(cs,"everySeries");var Si=p(cs,3);function fs(s,e,t,r){var n=new Array(e.length);s(e,(a,o,u)=>{t(a,(c,f)=>{n[o]=!!f,u(c)})},a=>{if(a)return r(a);for(var o=[],u=0;u<e.length;u++)n[u]&&o.push(e[u]);r(null,o)})}i(fs,"filterArray");function ls(s,e,t,r){var n=[];s(e,(a,o,u)=>{t(a,(c,f)=>{if(c)return u(c);f&&n.push({index:o,value:a}),u(c)})},a=>{if(a)return r(a);r(null,n.sort((o,u)=>o.index-u.index).map(o=>o.value))})}i(ls,"filterGeneric");function $e(s,e,t,r){var n=We(e)?fs:ls;return n(s,e,m(t),r)}i($e,"_filter");function hs(s,e,t){return $e(q,s,e,t)}i(hs,"filter");var ki=p(hs,3);function ds(s,e,t,r){return $e(x(e),s,t,r)}i(ds,"filterLimit");var Ti=p(ds,4);function ps(s,e,t){return $e(Q,s,e,t)}i(ps,"filterSeries");var xi=p(ps,3);function ms(s,e){var t=J(e),r=m(as(s));function n(a){if(a)return t(a);a!==!1&&r(n)}return i(n,"next"),n()}i(ms,"forever");var Ci=p(ms,2);function ys(s,e,t,r){var n=m(t);return Xt(s,e,(a,o)=>{n(a,(u,c)=>u?o(u):o(u,{key:c,val:a}))},(a,o)=>{for(var u={},{hasOwnProperty:c}=Object.prototype,f=0;f<o.length;f++)if(o[f]){var{key:d}=o[f],{val:h}=o[f];c.call(u,d)?u[d].push(h):u[d]=[h]}return r(a,u)})}i(ys,"groupByLimit");var _i=p(ys,4);var Pi=Qt("log");function ws(s,e,t,r){r=X(r);var n={},a=m(t);return x(e)(s,(o,u,c)=>{a(o,u,(f,d)=>{if(f)return c(f);n[u]=d,c(f)})},o=>r(o,n))}i(ws,"mapValuesLimit");var Li=p(ws,4);var qe;Wt?qe=process.nextTick:qt?qe=setImmediate:qe=Ht;var Ri=$t(qe),Oi=p((s,e,t)=>{var r=We(e)?[]:{};s(e,(n,a,o)=>{m(n)((u,...c)=>{c.length<2&&([c]=c),r[a]=c,o(u)})},n=>t(n,r))},3);function gs(s,e){if(e=X(e),!Array.isArray(s))return e(new TypeError("First argument to race must be an array of functions"));if(!s.length)return e();for(var t=0,r=s.length;t<r;t++)m(s[t])(e)}i(gs,"race");var Ii=p(gs,2);function ht(s,e,t,r){let n=m(t);return $e(s,e,(a,o)=>{n(a,(u,c)=>{o(u,!c)})},r)}i(ht,"reject$2");function As(s,e,t){return ht(q,s,e,t)}i(As,"reject");var Ui=p(As,3);function vs(s,e,t,r){return ht(x(e),s,t,r)}i(vs,"rejectLimit");var Di=p(vs,4);function bs(s,e,t){return ht(Q,s,e,t)}i(bs,"rejectSeries");var Ki=p(bs,3);function er(s){return function(){return s}}i(er,"constant");var ct=5,tr=0;function rr(s,e,t){var r={times:ct,intervalFunc:er(tr)};if(arguments.length<3&&typeof s=="function"?(t=e||Ft(),e=s):(Es(r,s),t=t||Ft()),typeof e!="function")throw new Error("Invalid arguments for async.retry");var n=m(e),a=1;function o(){n((u,...c)=>{u!==!1&&(u&&a++<r.times&&(typeof r.errorFilter!="function"||r.errorFilter(u))?setTimeout(o,r.intervalFunc(a-1)):t(u,...c))})}return i(o,"retryAttempt"),o(),t[zt]}i(rr,"retry");function Es(s,e){if(typeof e=="object")s.times=+e.times||ct,s.intervalFunc=typeof e.interval=="function"?e.interval:er(+e.interval||tr),s.errorFilter=e.errorFilter;else if(typeof e=="number"||typeof e=="string")s.times=+e||ct;else throw new Error("Invalid arguments for async.retry")}i(Es,"parseTimes");function Ss(s,e,t){return L(Boolean,r=>r)(q,s,e,t)}i(Ss,"some");var Ni=p(Ss,3);function ks(s,e,t,r){return L(Boolean,n=>n)(x(e),s,t,r)}i(ks,"someLimit");var Mi=p(ks,4);function Ts(s,e,t){return L(Boolean,r=>r)(Q,s,e,t)}i(Ts,"someSeries");var Bi=p(Ts,3);function xs(s,e,t){var r=m(e);return Vt(s,(a,o)=>{r(a,(u,c)=>{if(u)return o(u);o(u,{value:a,criteria:c})})},(a,o)=>{if(a)return t(a);t(null,o.sort(n).map(u=>u.value))});function n(a,o){var u=a.criteria,c=o.criteria;return u<c?-1:u>c?1:0}}i(xs,"sortBy");var Fi=p(xs,3);function Cs(s,e){var t=null,r;return is(s,(n,a)=>{m(n)((o,...u)=>{if(o===!1)return a(o);u.length<2?[r]=u:r=u,t=o,a(o?null:{})})},()=>e(t,r))}i(Cs,"tryEach");var qi=p(Cs);function _s(s,e,t){t=J(t);var r=m(e),n=m(s),a=[];function o(c,...f){if(c)return t(c);a=f,c!==!1&&n(u)}i(o,"next");function u(c,f){if(c)return t(c);if(c!==!1){if(!f)return t(null,...a);r(o)}}return i(u,"check"),n(u)}i(_s,"whilst");var Wi=p(_s,3);function Ps(s,e){if(e=X(e),!Array.isArray(s))return e(new Error("First argument to waterfall must be an array of functions"));if(!s.length)return e();var t=0;function r(a){var o=m(s[t++]);o(...a,J(n))}i(r,"nextTask");function n(a,...o){if(a!==!1){if(a||t===s.length)return e(a,...o);r(o)}}i(n,"next"),r([])}i(Ps,"waterfall");var Hi=p(Ps);var dt={times:600,interval:100},Ls={simulateFramework:!1},Rs={simulateFramework:!1,simulateTyping:!0,triggerEvents:!0},sr={timeout:9e4},nr=(t=>(t.ABORTED="aborted",t.AUTHENTICATED="authenticated",t))(nr||{}),Z=class{static{i(this,"Page")}client;worker;closed=!1;handle;_agent;constructor(e,t,r,n){this.client=e,this.worker=t,this.handle=r,this._agent=n}setAgent(e){this._agent=e}get agent(){if(!this._agent)throw new Error(`Agent is not configured. Install @uplink-code/ai and pass an agent instance when creating the client: | ||
| var St=Object.defineProperty;var i=(s,e)=>St(s,"name",{value:e,configurable:!0});var y=(s,e)=>{for(var t in e)St(s,t,{get:e[t],enumerable:!0})};var ot={};y(ot,{address:()=>A,krypto:()=>I,packet:()=>z,socket:()=>S,transform:()=>B,transport:()=>me,util:()=>E});var S={};y(S,{Mode:()=>Rt,Peer:()=>ae,Shutdown:()=>Ot,Socket:()=>it,State:()=>l,Stream:()=>le});var E={};y(E,{compress:()=>Ee,concat:()=>re,decompress:()=>Se,iterateStream:()=>Ve,random:()=>O});function re(s){let e=s.reduce((n,a)=>n+a.length,0),t=new Uint8Array(e),r=0;for(let n of s)t.set(n,r),r+=n.length;return t}i(re,"concat");function O(){return Math.random()*4294967295>>>0}i(O,"random");async function*Ve(s){let e=s.getReader();try{for(;;){let{done:t,value:r}=await e.read();if(t)break;yield r}}finally{e.releaseLock()}}i(Ve,"iterateStream");async function Ee(s){let e=new ReadableStream({start(r){r.enqueue(s),r.close()}}).pipeThrough(new CompressionStream("deflate-raw")),t=[];for await(let r of Ve(e))t.push(r);return re(t)}i(Ee,"compress");async function Se(s){let e=new ReadableStream({start(r){r.enqueue(s),r.close()}}).pipeThrough(new DecompressionStream("deflate-raw")),t=[];for await(let r of Ve(e))t.push(r);return re(t)}i(Se,"decompress");var se=class{static{i(this,"HashMap")}map=new Map;set(e,t){this.map.set(e.hash(),t)}get(e,t){return this.map.get(e.hash())??t}has(e){return this.map.has(e.hash())}delete(e){return this.map.delete(e.hash())}};var I={};y(I,{IV_LENGTH:()=>T,decrypt:()=>_e,deriveFlowEncryptionKey:()=>ze,encrypt:()=>Pe,exportRawKey:()=>Y,generateDataKey:()=>kt,generateECDHKeyPair:()=>ie,generateECDSAKeyPair:()=>ne,generateEncryptionKey:()=>xt,generateSalt:()=>Tt,importPKCS8ECDHPrivateKey:()=>Te,importPKCS8ECDSAPrivateKey:()=>ke,importRawECDHPublicKey:()=>V,importRawECDSAPublicKey:()=>G,randomUUID:()=>dr,sha256:()=>hr,sign:()=>xe,verify:()=>Ce});async function Y(s){return new Uint8Array(await crypto.subtle.exportKey("raw",s))}i(Y,"exportRawKey");function ne(s=!1){return crypto.subtle.generateKey({name:"ECDSA",namedCurve:"P-256"},s,["sign","verify"])}i(ne,"generateECDSAKeyPair");function G(s,e=!1){return crypto.subtle.importKey("raw",s,{name:"ECDSA",namedCurve:"P-256"},e,["verify"])}i(G,"importRawECDSAPublicKey");function ke(s,e=!1){return crypto.subtle.importKey("pkcs8",s,{name:"ECDSA",namedCurve:"P-256"},e,["sign"])}i(ke,"importPKCS8ECDSAPrivateKey");function V(s,e=!1){return crypto.subtle.importKey("raw",s,{name:"ECDH",namedCurve:"P-256"},e,[])}i(V,"importRawECDHPublicKey");function Te(s,e=!1){return crypto.subtle.importKey("pkcs8",s,{name:"ECDH",namedCurve:"P-256"},e,["deriveBits","deriveKey"])}i(Te,"importPKCS8ECDHPrivateKey");function ie(s=!1){return crypto.subtle.generateKey({name:"ECDH",namedCurve:"P-256"},s,["deriveBits","deriveKey"])}i(ie,"generateECDHKeyPair");function kt(s,e){return crypto.subtle.deriveKey({name:"ECDH",public:e},s,{name:"HKDF",hash:"SHA-512"},!1,["deriveBits","deriveKey"])}i(kt,"generateDataKey");function Tt(s,e){return crypto.subtle.deriveBits({name:"HKDF",hash:"SHA-512",salt:new ArrayBuffer,info:e},s,512)}i(Tt,"generateSalt");function xt(s,e,t=!1){return crypto.subtle.deriveKey({name:"HKDF",hash:"SHA-512",salt:new ArrayBuffer,info:e},s,{name:"AES-CBC",length:256},t,["encrypt","decrypt"])}i(xt,"generateEncryptionKey");function xe(s,e){return crypto.subtle.sign({name:"ECDSA",hash:"SHA-256"},s,e)}i(xe,"sign");function Ce(s,e,t){return crypto.subtle.verify({name:"ECDSA",hash:"SHA-256"},s,e,t)}i(Ce,"verify");var T=16;async function Pe(s,e){let t=new Uint8Array(T);crypto.getRandomValues(t);let r=await crypto.subtle.encrypt({name:"AES-CBC",iv:t},s,e);return{iv:t,ciphertext:r}}i(Pe,"encrypt");function _e(s,e,t){return crypto.subtle.decrypt({name:"AES-CBC",iv:e},s,t)}i(_e,"decrypt");async function ze(s,e,t,r,n=!1){let a=await kt(s,e),o=new ArrayBuffer(8),u=new DataView(o);u.setUint32(0,t),u.setUint32(4,r);let c=await Tt(a,o);return xt(a,c,n)}i(ze,"deriveFlowEncryptionKey");async function hr(s){return new Uint8Array(await crypto.subtle.digest("SHA-256",new TextEncoder().encode(s)))}i(hr,"sha256");function dr(){return crypto.randomUUID()}i(dr,"randomUUID");var ae=class s{static{i(this,"Peer")}address;ecdsa;seen;constructor(e,t,r=Date.now()){this.address=e,this.ecdsa=t,this.seen=r}update(){this.seen=Date.now()}hash(){return this.address.address}static async from(e){return new s(e.from,await G(e.payload))}};var U=class{static{i(this,"Emitter")}listeners=new Map;on(e,t){let r=this.listeners.get(e)??[];r.push(t),this.listeners.set(e,r)}off(e,t){let r=this.listeners.get(e);r&&this.listeners.set(e,r.filter(n=>n!==t))}emit(e,...t){for(let r of this.listeners.get(e)??[])r(...t)}};var A={};y(A,{ADDRESS_BROADCAST_MASK:()=>_,ADDRESS_TYPE_MASK:()=>Xe,Address:()=>w,Type:()=>Le,from:()=>pr,generate:()=>mr});var Le=(a=>(a[a.RELAY=0]="RELAY",a[a.CLIENT=268435456]="CLIENT",a[a.WORKER=536870912]="WORKER",a[a.SERVICE=805306368]="SERVICE",a[a.ALL=4294967295]="ALL",a))(Le||{}),Xe=4026531840,_=268435455,w=class s{constructor(e){this.address=e}static{i(this,"Address")}static BROADCAST=s.from(4294967295);static RELAY_BROADCAST=s.from(0|_);static CLIENT_BROADCAST=s.from(268435456|_);static WORKER_BROADCAST=s.from(536870912|_);static SERVICE_BROADCAST=s.from(805306368|_);hash(){return this.address}static from(e){return new s(e)}static generate(e){let t;do t=new s((O()&_|e)>>>0);while(s.isBroadcast(t.address));return t}static isBroadcast(e){return(e&_)===_}isBroadcast(){return s.isBroadcast(this.address)}type(){return(this.address&Xe)>>>0}broadcast(){return(this.address|_)>>>0}match(e,t=!0){return this.address===e.address||t&&(this.broadcast()===e.address||e.address===4294967295)}toString(){return`${Le[(this.address&Xe)>>>0]??Le[this.address]??"UNK"} <${this.address.toString(16).padStart(8,"0")}>`}};function pr(s){return w.from(s)}i(pr,"from");function mr(s){return w.generate(s)}i(mr,"generate");var z={};y(z,{Flag:()=>fe,Offset:()=>Pt,PKT_DEFAULT_MSS:()=>Ct,PKT_HEADER_LEN:()=>x,PKT_MAGIC:()=>oe,PKT_OVERHEAD_MAX:()=>Oe,PKT_SIGNATURE_LEN:()=>ue,PacketCopy:()=>Ze,PacketZero:()=>ce,Type:()=>et,create:()=>v,decode:()=>tt,packetize:()=>rt});var oe=85,Ct=1024,et=(r=>(r[r.ANNOUNCE=0]="ANNOUNCE",r[r.DISCOVER=1]="DISCOVER",r[r.DISONNECT=2]="DISONNECT",r))(et||{}),fe=(d=>(d[d.NOP=0]="NOP",d[d.FIN=1]="FIN",d[d.SYN=2]="SYN",d[d.RST=4]="RST",d[d.PSH=8]="PSH",d[d.ACK=16]="ACK",d[d.CTL=32]="CTL",d[d.ENC=64]="ENC",d[d.CMP=128]="CMP",d[d.ALL=255]="ALL",d))(fe||{}),Pt=(h=>(h[h.MAGIC=0]="MAGIC",h[h.VERSION=1]="VERSION",h[h.TYPE=2]="TYPE",h[h.FLAGS=3]="FLAGS",h[h.SEQUENCE=4]="SEQUENCE",h[h.ACK=8]="ACK",h[h.FLOW=12]="FLOW",h[h.TO=16]="TO",h[h.FROM=20]="FROM",h[h.SIGNATURE=24]="SIGNATURE",h[h.PAYLOAD=88]="PAYLOAD",h))(Pt||{}),x=88,ue=64,Oe=x+T+16,Re=new Uint8Array(ue),ce=class s{static{i(this,"PacketZero")}data;view;_magic;_version;_type;_flags;_sequence;_ack;_flow;_to;_from;_signature;_payload;constructor(e){e.buffer?(this.data=e.buffer,this.view=new DataView(this.data.buffer,e.buffer.byteOffset,e.buffer.byteLength)):(this.data=new Uint8Array(x+(e.payload?.byteLength??0)),this.view=new DataView(this.data.buffer),this.view.setUint8(0,oe),e.version&&(this.version=e.version),e.type&&(this.type=e.type),e.flags&&(this.flags=e.flags),e.sequence&&(this.sequence=e.sequence),e.ack&&(this.ack=e.ack),e.flow&&(this.flow=e.flow),e.to&&(this.to=e.to),e.from&&(this.from=e.from),e.signature&&this.data.set(e.signature,24),e.payload&&this.copy(e.payload))}get magic(){return this._magic?this._magic:this._magic=this.view.getUint8(0)}get version(){return this._version?this._version:this._version=this.view.getUint8(1)}set version(e){this._version=e,this.view.setUint8(1,e)}get type(){return this._type?this._type:this._type=this.view.getUint8(2)}set type(e){this._type=e,this.view.setUint8(2,e)}get flags(){return this._flags?this._flags:this._flags=this.view.getUint8(3)}set flags(e){this._flags=e,this.view.setUint8(3,e)}get sequence(){return this._sequence?this._sequence:this._sequence=this.view.getUint32(4)}set sequence(e){this._sequence=e,this.view.setUint32(4,e)}get ack(){return this._ack?this._ack:this._ack=this.view.getUint32(8)}set ack(e){this._ack=e,this.view.setUint32(8,e)}set flow(e){this._flow=e,this.view.setUint32(12,e)}get flow(){return this._flow?this._flow:this._flow=this.view.getUint32(12)}get to(){return this._to?w.from(this._to):w.from(this._to=this.view.getUint32(16))}set to(e){this._to=e.address,this.view.setUint32(16,this._to)}get from(){return this._from?w.from(this._from):w.from(this._from=this.view.getUint32(20))}set from(e){this._from=e.address,this.view.setUint32(20,this._from)}get signature(){return this._signature?this._signature:this._signature=this.data.subarray(24,24+ue)}set signature(e){this._signature=e}get payload(){return this._payload?this._payload:this._payload=this.data.subarray(88)}set payload(e){this._payload=e}resize(e){let t=x+e,r=new Uint8Array(t),n=t>this.data.byteLength?this.data.byteLength:t;r.set(this.data.subarray(0,n)),this.data=r,this.view=new DataView(this.data.buffer)}copy(e){this.data.set(e,x),this._payload=this.data.subarray(x)}async compress(){let e=await Ee(this.payload);e.byteLength>=this.payload.byteLength||(this.flags|=128,this.payload=e)}async decompress(){this.flags&128&&(this.payload=await Se(this.payload),this.flags&=-129)}async encrypt(e){let{iv:t,ciphertext:r}=await Pe(e,this.payload),n=new Uint8Array(t.byteLength+r.byteLength);n.set(t,0),n.set(new Uint8Array(r),T),this.flags|=64,this.payload=n}async decrypt(e){if(!(this.flags&64))return;let t=this.payload.subarray(0,T),r=this.payload.subarray(T);this.flags&=-65,this.payload=new Uint8Array(await _e(e,t,r))}async sign(e){return this.signature=Re,this.signature=new Uint8Array(await xe(e,this.encode()))}async verify(...e){let t=new Uint8Array(this.signature);this.signature=Re;let r=!1;for(let n of e)if(r=await Ce(n,t,this.encode()),r)break;return this.signature=t,r}encode(){return this._payload&&this._payload.buffer!=this.data.buffer&&(this.resize(this._payload.byteLength),this.copy(this.payload)),this._signature&&this._signature.buffer!=this.data.buffer&&(this.data.set(this._signature,24),this._signature=this.data.subarray(24,24+ue)),this.data}static decode(e){if(e.byteLength<x)return null;let t=new s({buffer:e});return t.magic!==oe?null:t}},Je=class{static{i(this,"Decoder")}view;offset;constructor(e){this.view=new DataView(e),this.offset=0}uint8(){return this.view.getUint8(this.offset++)}uint32(){let e=this.view.getUint32(this.offset);return this.offset+=4,e}uint8array(e){let t=new Uint8Array(this.view.buffer,this.offset,e);return this.offset+=e,t}},Qe=class{static{i(this,"Encoder")}view;offset;constructor(e){this.view=new DataView(e),this.offset=0}uint8(e){this.view.setUint8(this.offset++,e)}uint32(e){this.view.setUint32(this.offset,e),this.offset+=4}uint8array(e){new Uint8Array(this.view.buffer,this.offset).set(e),this.offset+=e.byteLength}},Ze=class s{static{i(this,"PacketCopy")}version;type;flags;sequence;ack;flow;to;from;signature;payload;constructor(e){this.version=e?.version??0,this.type=e?.type??0,this.flags=e?.flags??0,this.sequence=e?.sequence??0,this.ack=e?.ack??0,this.flow=e?.flow??0,this.to=e?.to??w.from(0),this.from=e?.from??w.from(0),this.signature=e?.payload??new Uint8Array,this.payload=e?.payload??new Uint8Array}async compress(){let e=await Ee(this.payload);e.byteLength>=this.payload.byteLength||(this.flags|=128,this.payload=e)}async decompress(){this.flags&128&&(this.payload=await Se(this.payload),this.flags&=-129)}async encrypt(e){let{iv:t,ciphertext:r}=await Pe(e,this.payload),n=new Uint8Array(t.byteLength+r.byteLength);n.set(t,0),n.set(new Uint8Array(r),T),this.payload=n}async decrypt(e){let t=this.payload.subarray(0,T),r=this.payload.subarray(T);this.payload=new Uint8Array(await _e(e,t,r))}async sign(e){return this.signature=Re,this.signature=new Uint8Array(await xe(e,this.encode()))}async verify(...e){let t=new Uint8Array(this.signature);this.signature=Re;let r=!1;for(let n of e)if(r=await Ce(n,t,this.encode()),r)break;return this.signature=t,r}encode(){let e=new Uint8Array(x+this.payload.byteLength),t=new Qe(e.buffer);return t.uint8(oe),t.uint8(this.version),t.uint8(this.type),t.uint8(this.flags),t.uint32(this.sequence),t.uint32(this.ack),t.uint32(this.flow),t.uint32(this.to.address),t.uint32(this.from.address),t.uint8array(this.signature),t.uint8array(this.payload),e}static decode(e){let t=e.buffer,r=new Je(t),n=new s;return t.byteLength<x||r.uint8()!=oe||(n.version=r.uint8(),n.type=r.uint8(),n.flags=r.uint8(),n.sequence=r.uint32(),n.ack=r.uint32(),n.flow=r.uint32(),n.to=w.from(r.uint32()),n.from=w.from(r.uint32()),n.signature=r.uint8array(ue),n.payload=new Uint8Array(t,r.offset),r.offset!=x)?null:n}};function v(s){return new ce(s)}i(v,"create");function tt(s){return ce.decode(s)}i(tt,"decode");function*rt(s,e){let t=e?.limit??Ct,r=Math.floor(s.byteLength/t),n=s.byteLength%t;s.byteLength===0&&(yield v({...e?.header}));let a=0;for(;a<r;++a){let o=a*t;yield v({...e?.header,payload:s.subarray(o,o+t)})}if(n){let o=a*t;yield v({...e?.header,payload:s.subarray(o,o+n)})}}i(rt,"packetize");function Lt(s,e){return s-e>>>0>=2147483648}i(Lt,"LT");function _t(s,e){return!Lt(e,s)}i(_t,"LTE");var l={CLOSED:0,LISTEN:1,SYN_SENT:2,SYN_RECV:3,ESTABLISHED:4,CLOSE_WAIT:5,FIN_WAIT:6,FIN_WAIT_2:7,LAST_ACK:8,CLOSING:9,TIMED_OUT:10,TIME_WAIT:11},Rt=(r=>(r[r.NONE=0]="NONE",r[r.READ=1]="READ",r[r.WRITE=2]="WRITE",r))(Rt||{}),Ot=(r=>(r[r.READ=0]="READ",r[r.WRITE=1]="WRITE",r[r.RDWR=2]="RDWR",r))(Ot||{}),le=class extends U{static{i(this,"Stream")}ACK_DELAY=200;ACK_FREQUENCY=2;LAST_ACK_TIMEOUT=3e4;FIN_WAIT_2_TIMEOUT=3e4;RETRANSMIT_TIMEOUT=3e3;RETRANSMIT_LIMIT=5;RETRANSMIT_ENABLED=!0;MAX_CHUNK_SIZE=1024;TIME_WAIT_DELAY=100;canceled=!1;controller;readable=new ReadableStream({start:i(e=>this.controller=e,"start"),cancel:i(()=>{this.canceled=!0},"cancel")});expected=0;unacked=0;duplicates=new Map;pending=[];interval;timer;header;stats;ecdh;skey;rkey;mode=3;state=l.CLOSED;exportable=!1;output;to;from;flow;constructor(e,t,r,n,a){super(),this.output=e,this.to=t,this.from=r,this.flow=n,a&&(this.exportable=a.danger?.exportable??this.exportable,this.skey=a.danger?.key??this.skey,this.rkey=a.danger?.key??this.rkey,this.MAX_CHUNK_SIZE=a.maxChunkSize??this.MAX_CHUNK_SIZE,this.ACK_DELAY=a.ackDelay??this.ACK_DELAY,this.ACK_FREQUENCY=a.ackFrequency??this.ACK_FREQUENCY,this.RETRANSMIT_LIMIT=a.retransmit?.limit??this.RETRANSMIT_LIMIT,this.RETRANSMIT_TIMEOUT=a.retransmit?.timeout??this.RETRANSMIT_TIMEOUT,this.RETRANSMIT_ENABLED=a.retransmit?.enabled??this.RETRANSMIT_ENABLED),this.interval=setInterval(()=>{this.tick()},this.ACK_DELAY),this.header={version:0,type:0,flags:0,to:this.to,from:w.from(0),flow:this.flow,sequence:0,ack:0},this.stats={retransmits:0,acks:0,piggybacks:0,ooo:0,received:0,transmitted:0}}async init(e){e?this.ecdh=e:this.ecdh=await ie()}async deriveEncryptionKey(e,t){let r=await V(e.payload);return ze(this.ecdh.privateKey,r,e.flow,t.address,this.exportable)}tick(){switch(this.state){case l.TIMED_OUT:case l.CLOSED:break;default:this.ack(),this.retransmit()}}async establish(){if(!(l.ESTABLISHED<=this.state))return l.CLOSED===this.state&&(this.transition(l.SYN_SENT),this.syn()),new Promise(e=>{let t=i(r=>{l.ESTABLISHED<=r&&(this.off("transition",t),this.emit("established"),e())},"listener");this.on("transition",t)})}async read(e){let t=[],r=this.readable.getReader();e?.timeout&&setTimeout(()=>{r.releaseLock()},e.timeout);try{do{let n=await r.read();if(n.done)break;let a=n.value;if(a.flags&34)continue;let o=a.payload.byteLength;if(o&&t.push(a.payload),a.flags&9||!e?.push&&o)break}while(!0)}catch(n){throw n?.name==="TypeError"?new Error("TIMEOUT",{cause:n}):n}finally{r.releaseLock()}return re(t)}async send(e,t){if(!(this.mode&2))throw new Error(`Writing to RO Stream ${this.mode}`);await this.establish(),await this.write(rt(e,{header:this.header,limit:this.MAX_CHUNK_SIZE}),t)}async write(e,t){let r=e[Symbol.iterator](),n=r.next(),a=r.next(),o=t?.compress??!0;for(;!n.done;){let u=n.value;a.done&&t?.push&&(u.flags|=8),o&&await u.compress(),this.skey&&await u.encrypt(this.skey),this.header.ack!==this.expected&&(u.flags|=16,this.header.ack=this.expected,++this.stats.piggybacks),u.ack=this.header.ack,this.transmit(u),n=a,a=r.next()}}transmit(e,t=!0,r=!0,n=!0){n&&(e.from=this.from,e.sequence=this.header.sequence),this.stats.transmitted+=e.payload.byteLength,t&&this.pending.push({time:Date.now(),attempts:0,packet:e}),r&&(this.header.sequence=this.header.sequence+e.payload.byteLength+1>>>0),this.output(e)}processAck(e){if(!this.pending.length)return;let t=this.duplicates.get(e.ack)??0,r=this.pending.findLastIndex(a=>Lt(a.packet.sequence,e.ack));if(this.pending.splice(0,r+1).length)this.duplicates.clear();else{let a=t+1;this.duplicates.set(e.ack,a),a>=3&&this.retransmit(!0)}}async processPacket(e){let t=e.payload.byteLength;this.stats.received+=t;let r=!1;if(this.expected===e.sequence){let n=e.flags&3;(t||n)&&(this.expected=this.expected+t+1>>>0,!n&&++this.unacked>=this.ACK_FREQUENCY&&this.ack()),this.rkey&&await e.decrypt(this.rkey),await e.decompress(),this.canceled||this.controller.enqueue(e),r=!0}else++this.stats.ooo;return r}async consume(e){let t=e.flags&16;switch(e.flags&4&&this.transition(l.CLOSED),this.state){case l.SYN_SENT:{if(t&&e.flags&2){let r=await this.processPacket(e);this.processAck(e),r&&(this.skey||(this.skey=await this.deriveEncryptionKey(e,this.from),this.rkey=await this.deriveEncryptionKey(e,this.to)),this.transition(l.ESTABLISHED),this.ack(!0))}break}case l.LISTEN:{e.flags&2&&!t&&await this.processPacket(e)&&(this.skey||(this.skey=await this.deriveEncryptionKey(e,this.from),this.rkey=await this.deriveEncryptionKey(e,this.to)),this.transition(l.SYN_RECV),this.syn(16));break}case l.SYN_RECV:{t&&(this.processAck(e),await this.processPacket(e)&&this.transition(l.ESTABLISHED));break}case l.ESTABLISHED:{t&&this.processAck(e),await this.processPacket(e)&&e.flags&1&&(this.transition(l.CLOSE_WAIT),this.ack(!0));break}case l.CLOSE_WAIT:t&&this.processAck(e);break;case l.CLOSING:case l.LAST_ACK:{t&&(this.processAck(e),await this.processPacket(e),_t(this.header.sequence,e.ack)&&this.transition(l.CLOSED));break}case l.FIN_WAIT:{t&&this.processAck(e),await this.processPacket(e)&&(e.flags&1&&(this.transition(l.CLOSING),this.ack(!0)),t&&_t(this.header.sequence,e.ack)&&this.transition(l.FIN_WAIT_2));break}case l.FIN_WAIT_2:{t&&this.processAck(e),await this.processPacket(e)&&e.flags&1&&(this.ack(!0),this.transition(l.TIME_WAIT));break}}}retransmit(e=!1){if(this.RETRANSMIT_ENABLED)for(let t of this.pending){let r=Date.now();if(e||r-t.time>this.RETRANSMIT_TIMEOUT){if(t.time=r,++t.attempts,t.attempts>this.RETRANSMIT_LIMIT){this.transition(l.TIMED_OUT);break}++this.stats.retransmits,this.transmit(t.packet,!1,!1,!1)}}}syn(e){Y(this.ecdh.publicKey).then(t=>{let r=v({...this.header,flags:2|(e??0),payload:t});r.flags&16&&(r.ack=this.header.ack=this.expected),this.transmit(r)}).catch(t=>{throw t})}ack(e=!1,t){if(this.header.ack==this.expected&&!e)return;this.header.ack=this.expected,this.unacked=0;let r=v({...this.header,flags:16|(t??0)});++this.stats.acks,this.transmit(r,!1,!1)}fin(e){let t=v({...this.header,flags:1|(e??0)});this.transmit(t)}shutdown(e=1){switch(e){default:case 1:this.mode=1,this.transition(l.FIN_WAIT),this.fin();break;case 0:this.mode=2;break;case 2:this.mode=0,this.fin(),this.transition(l.CLOSED);break}}transition(e){let t=this.state,r=i(()=>{clearInterval(this.interval),clearTimeout(this.timer),this.emit("closed")},"clear");switch(e){case l.CLOSING:clearTimeout(this.timer),this.timer=setTimeout(()=>{this.transition(l.TIME_WAIT)},this.LAST_ACK_TIMEOUT);break;case l.LAST_ACK:clearTimeout(this.timer),this.timer=setTimeout(()=>{this.transition(l.CLOSED)},this.LAST_ACK_TIMEOUT);break;case l.TIME_WAIT:clearTimeout(this.timer),this.timer=setTimeout(()=>{this.transition(l.CLOSED)},this.TIME_WAIT_DELAY);break;case l.TIMED_OUT:this.controller.error("TIMEOUT"),r();break;case l.CLOSED:if(l.CLOSED===t)break;this.canceled||this.controller.close(),this.canceled=!0,r();break}this.state=e,this.emit("transition",e,t)}listen(){this.transition(l.LISTEN)}async close(){let e=new Promise(t=>{l.CLOSED===this.state&&t();let r=i(()=>{t(),this.off("closed",r)},"listener");this.on("closed",r)});switch(this.state){case l.LAST_ACK:case l.FIN_WAIT_2:case l.FIN_WAIT:case l.TIMED_OUT:case l.TIME_WAIT:case l.CLOSED:break;case l.CLOSE_WAIT:this.transition(l.LAST_ACK),this.fin();break;case l.SYN_RECV:case l.ESTABLISHED:this.shutdown();break;case l.SYN_SENT:case l.LISTEN:default:this.transition(l.CLOSED);break}return e}};var B={};y(B,{decoder:()=>pe,encoder:()=>de,signer:()=>he,unwrap:()=>st,unwrapLengthPrefix:()=>nt});var he={};y(he,{Signer:()=>Ie,transform:()=>yr});var Ie=class{static{i(this,"Signer")}secret;constructor(e){this.secret=e}async transform(e,t){await e.sign(this.secret),t.enqueue(e)}};function yr(s){return new TransformStream(new Ie(s))}i(yr,"transform");var de={};y(de,{PacketToUint8Array:()=>Ue,transform:()=>wr});var Ue=class{static{i(this,"PacketToUint8Array")}transform(e,t){t.enqueue(e.encode())}};function wr(){return new TransformStream(new Ue)}i(wr,"transform");var pe={};y(pe,{Uint8ArrayToPacket:()=>De,transform:()=>gr});var De=class{static{i(this,"Uint8ArrayToPacket")}transform(e,t){let r=tt(e);if(!r){t.error("Invalid Packet Encoding");return}t.enqueue(r)}};function gr(){return new TransformStream(new De)}i(gr,"transform");var st={};y(st,{Unwrap:()=>Ke,transform:()=>Ar});var Ke=class{static{i(this,"Unwrap")}transform(e,t){e.flags&34||(e.payload.byteLength&&t.enqueue(e.payload),e.flags&1&&t.terminate())}};function Ar(){return new TransformStream(new Ke)}i(Ar,"transform");var nt={};y(nt,{LENGTH_BYTES:()=>vr,UnwrapLengthPrefix:()=>Ne,transform:()=>br});var vr=4,Ne=class{static{i(this,"UnwrapLengthPrefix")}buffer=new Uint8Array(0);maxMessageSize=-1>>>0;constructor(e){this.maxMessageSize=e??this.maxMessageSize}transform(e,t){let r=new Uint8Array(this.buffer.length+e.length);r.set(this.buffer),r.set(e,this.buffer.length),this.buffer=r;let n=0;for(;n+4<=this.buffer.length;){let o=new DataView(this.buffer.buffer,this.buffer.byteOffset,this.buffer.byteLength).getUint32(n,!1);if(o>this.maxMessageSize){t.error(new Error(`Data length ${o} too large`));return}let u=4+o;if(n+u<=this.buffer.length){let c=this.buffer.slice(n+4,n+u);t.enqueue(c),n+=u}else break}n>0&&(this.buffer=this.buffer.subarray(n))}flush(e){this.buffer.length>0&&e.error(new Error(`Incomplete message remaining at stream end: ${this.buffer.length} bytes`))}};function br(s){return new TransformStream(new Ne(s))}i(br,"transform");var it=class extends U{static{i(this,"Socket")}ANNOUNCE_PERIOD=5e3;PEER_EXPIRATION=this.ANNOUNCE_PERIOD*5;peers=new se;transport;writer;substreams=new se;ecdsa;exportedPub;timer;trusted=[];closed=!1;canceled=!1;streamKey;ecdh;handler;address;constructor(e=async r=>{await r.readable.pipeTo(new WritableStream)},t=w.from(0)){super(),this.handler=e,this.address=t}async init(e,t){if(e.MAX_CHUNK_SIZE<=Oe)throw new Error(`Transport MAX_CHUNK_SIZE too small to fit overhead: ${e.MAX_CHUNK_SIZE} <= ${Oe}`);if(this.streamKey=t?.keys?.danger?.streamKey,this.ecdh=t?.keys?.danger?.ecdh,t?.keys?.ecdsa?this.ecdsa=t.keys.ecdsa:this.ecdsa=await ne(t?.keys?.danger?.exportable??!1),t?.keys?.trusted)for(let r of t.keys.trusted)this.trusted.push(await Y(r));this.exportedPub=await Y(this.ecdsa.publicKey),this.transport=e,this.transport.readable=e.readable.pipeThrough(pe.transform()),this.transport.writable=e.writable,this.transport.readable.pipeTo(new WritableStream({write:i(async r=>{await this.consume(r)},"write"),abort:i(async()=>{await this.close()},"abort"),close:i(async()=>{await this.close()},"close")})).catch(r=>{console.error("SOCKET PIPETO ERROR",r)}),new ReadableStream({start:i(r=>{this.writer=r},"start"),cancel:i(r=>{this.canceled=!0,console.log("SOCKET READABLE CANCEL",r)},"cancel")}).pipeThrough(he.transform(this.ecdsa.privateKey)).pipeThrough(de.transform()).pipeTo(this.transport.writable).catch(r=>{console.error(r)}),this.timer=setInterval(()=>{this.tick()},this.ANNOUNCE_PERIOD),this.announce()}tick(){this.announce(),this.expirePeers()}enqueue(e){!this.canceled&&!this.closed&&this.writer.enqueue(e)}announce(e=w.BROADCAST){let t=v({flags:32,type:0,sequence:Date.now()/1e3>>>0,ack:O(),to:e,from:this.address,payload:this.exportedPub});this.enqueue(t)}discover(e=w.BROADCAST){let t=v({flags:32,type:1,sequence:Date.now()/1e3>>>0,ack:O(),to:e,from:this.address});this.enqueue(t)}disconnect(e=w.BROADCAST){let t=v({flags:32,type:2,sequence:Date.now()/1e3>>>0,ack:O(),to:e,from:this.address});this.enqueue(t)}rst(e,t){let r=v({flags:4,sequence:Date.now()/1e3>>>0,ack:0,to:e,from:this.address,flow:t});this.enqueue(r)}substream(e,t,r=this.address){let n=this.substreams.get(e)??new Map;if(t===void 0)do t=O();while(n.has(t));let a=new le(o=>{this.enqueue(o)},e,r,t,{maxChunkSize:this.transport.MAX_CHUNK_SIZE,danger:{key:this.streamKey}});return a.on("closed",()=>this.remove(e,t)),n.set(t,a),this.substreams.set(e,n),a.init(this.ecdh).then(()=>a)}async addPeer(e){let t=this.peers.get(e.from);if(t)await e.verify(t.ecdsa)&&t.update();else if(t=await ae.from(e),await e.verify(t.ecdsa)){if(this.trusted.length){let r=!1,n=e.payload;for(let a of this.trusted)if(a.every((o,u)=>o===n[u])){r=!0;break}if(!r)return}this.peers.set(e.from,t),this.emit("peer",t)}}expirePeers(){for(let e of this.peers.map.values())Date.now()-e.seen>this.PEER_EXPIRATION&&(this.peers.delete(e.address),this.emit("peergone",e,!0))}remove(e,t){return this.substreams.get(e)?.delete(t)}async verify(e){let t=this.peers.get(e.from);return!(!t||!await e.verify(t.ecdsa))}async consume(e){if(!this.address.match(e.to))return;if(e.flags&32){switch(e.type){case 0:await this.addPeer(e);break;case 1:await this.verify(e)&&this.announce(e.from);break;case 2:{let a=this.peers.get(e.from);if(a){if(!await e.verify(a.ecdsa))return;a.update(),this.emit("peergone",a,!1),this.peers.delete(e.from)}break}}return}if(!await this.verify(e))return;let r=(this.substreams.get(e.from)??new Map).get(e.flow),n=e.flags&2&&!(e.flags&16);!r&&n?(r=await this.substream(e.from,e.flow,this.address),r.listen(),this.handler?.call(this,r)):!r&&!(e.flags&4)&&this.rst(e.from,e.flow),await r?.consume(e)}async close(){if(!this.closed){for(let e of this.substreams.map.values()){for(let t of e.values())await t.close();e.clear()}this.substreams.map.clear(),this.disconnect(),this.closed=!0,this.writer.close(),clearInterval(this.timer)}}};var me={};y(me,{ws:()=>at});var at={};y(at,{WebSocketTransport:()=>Me,create:()=>Er});var Me=class{static{i(this,"WebSocketTransport")}MAX_CHUNK_SIZE=65536;readable;writable;writer;reader;closed=!1;reconnect=!0;ws;factory;constructor(e,t){this.factory=e,this.reconnect=t?.reconnect??this.reconnect,this.readable=new ReadableStream({start:i(r=>{this.writer=r},"start"),cancel:i(()=>{this.closed=!0},"cancel")}),this.writable=new WritableStream({start:i(r=>{this.reader=r},"start"),write:i(async r=>{if(WebSocket.OPEN===this.ws.readyState){this.ws.send(r);return}if(WebSocket.CLOSING!==this.ws.readyState){if(WebSocket.CLOSED===this.ws.readyState&&!this.closed){this.reconnect&&await this.connect(!0);return}await new Promise(n=>{this.ws.addEventListener("error",()=>{n()},{once:!0}),this.ws.addEventListener("open",()=>{this.ws.send(r),n()},{once:!0})})}},"write"),abort:i(()=>{this.closed=!0},"abort")})}async connect(e=!1){this.ws=await this.factory(),this.ws.binaryType="arraybuffer",this.ws.addEventListener("message",t=>{let r=t.data;this.closed||(r instanceof ArrayBuffer?this.writer.enqueue(new Uint8Array(r)):r instanceof Blob?r.arrayBuffer().then(n=>{this.writer.enqueue(new Uint8Array(n))}).catch(n=>{throw n}):this.writer.enqueue(new TextEncoder().encode(r)))}),this.ws.addEventListener("error",()=>{}),this.ws.addEventListener("close",t=>{try{(t.wasClean||!this.reconnect)&&(this.closed||this.writer.close(),this.closed=!0)}catch(r){console.error("WEBSOCKET CLOSING EXCEPTION",r)}})}async close(){this.ws.close()}};function Er(s,e){return new Me(s,e)}i(Er,"create");var Kt={};y(Kt,{ErrorMessage:()=>we,Message:()=>L,RequestMessage:()=>ye,ResponseMessage:()=>F,Result:()=>D,URPC:()=>K,URPCError:()=>b,decode:()=>xr,default:()=>Cr});var ut={};y(ut,{URPC:()=>K,URPCError:()=>b});function It(s){let e=s.reduce((n,a)=>n+a.length,0),t=new Uint8Array(e),r=0;for(let n of s)t.set(n,r),r+=n.length;return t}i(It,"concat");async function Ut(s){let e=new ReadableStream({start(r){r.enqueue(s),r.close()}}).pipeThrough(new CompressionStream("deflate-raw")),t=[];for await(let r of E.iterateStream(e))t.push(r);return It(t)}i(Ut,"compress");async function Dt(s){let e=new ReadableStream({start(r){r.enqueue(s),r.close()}}).pipeThrough(new DecompressionStream("deflate-raw")),t=[];for await(let r of E.iterateStream(e))t.push(r);return It(t)}i(Dt,"decompress");function X(s){let e=new TextDecoder().decode(s);return e==="undefined"&&(e="null"),e&&JSON.parse(e)}i(X,"decode");function Be(s){return new TextEncoder().encode(JSON.stringify(s))}i(Be,"encode");var L=class s{static{i(this,"Message")}version=0;method;params;error;result;constructor(e,t,r,n){this.method=e,this.params=t,this.error=r,this.result=n}async encode(){let e={version:this.version,method:this.method,params:this.params,error:this.error,result:this.result?this.result:void 0};return Ut(Be(e))}static async decode(e){let t=X(await Dt(e));return new s(t.method,t.params,t.error,t.result?t.result:void 0)}},ye=class extends L{static{i(this,"RequestMessage")}method;params;constructor(e,t){super(e,t,void 0,void 0),this.method=e,this.params=t}},F=class extends L{static{i(this,"ResponseMessage")}constructor(e){super(void 0,void 0,void 0,new TextDecoder().decode(e))}},we=class extends L{static{i(this,"ErrorMessage")}error;constructor(e){super(void 0,void 0,e,void 0),this.error=e}};var D=class{constructor(e,t){this.stream=e;this.result=t;this.stream=e}static{i(this,"Result")}_readable;get readable(){return this._readable??(this._readable=this.stream.readable.pipeThrough(B.unwrap.transform()))}async value({close:e=!1}={}){return e&&await this.close(),X(this.result)}async text(e,t){let r=[],n=this.readable.pipeThrough(new TextDecoderStream(e,t));for await(let a of E.iterateStream(n))r.push(a);return r.join("")}async bytes(){let e=[];for await(let t of E.iterateStream(this.readable))e.push(t);return E.concat(e)}async json(e,t){return JSON.parse(await this.text(e,t))}async close(){await this.stream.close()}};var b=class extends Error{static{i(this,"URPCError")}code;constructor(e,t,r){super(t,r),this.code=e,this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor)}},K=class{static{i(this,"URPC")}transport;socket;handlers=new Map;options;constructor(e,t,r){this.options=r,this.socket=new S.Socket(n=>this.handle(n),t),this.transport=e}async init(){await this.socket.init(this.transport,{keys:{...this.options?.keys,danger:{ecdh:this.options?.keys?.ecdh,...this.options?.keys?.danger}}})}register(e,t){this.handlers.set(e,t)}invoke(e,t,r){let n=this.handlers.get(e);if(!n)throw new b(-32601,"Method Not Found");return n(r,...t)}async handle(e){let t=await e.read({push:!0,timeout:0}),r=await L.decode(t);try{if(!r)throw new b(-32700,"Parse error");if(!r.method)throw new b(-32601,"Method not found");if(!r.params)throw new b(-32602,"Invalid parameters");let n=await this.invoke(r.method,r.params,e.readable.pipeThrough(B.unwrap.transform())),a=n.getReader(),{done:o,value:u}=await a.read();if(a.releaseLock(),o)throw new b(-32603,"Internal error: INCOMPLETE");let c=new F(u);await e.send(await c.encode(),{push:!0});for await(let f of E.iterateStream(n))await e.send(f,{push:!1})}catch(n){let a=-1,o=n.message;n instanceof b&&(a=n.code);let u=new we({code:a,message:o});await e.send(await u.encode(),{push:!0})}finally{await e.close()}}async call(e,t,r,n){let a=n?.timeout??0,o=await this.socket.substream(e),u=new ye(t,r);return await o.send(await u.encode(),{push:!0}),n?.stream&&n.stream.pipeTo(new WritableStream({async write(c){await o.send(c)},close(){o.shutdown()}})).catch(c=>{console.error(c)}),this.result(o,a)}async result(e,t){let r=i(async(o,u)=>{throw await e.close(),new b(o,u)},"error"),n=await e.read({push:!0,timeout:t}).catch(()=>{});if(!n)return r(-2,"URPC Timeout");if(!n.byteLength)return r(-32603,"Internal error: EOF");let a=await L.decode(n);return a?a.error?r(a.error.code,a.error.message):a.result?new D(e,new TextEncoder().encode(a.result)):r(-32700,"Parse Error: no result"):r(-32603,"Internal error: Invalid Response")}async close(){await this.socket.close()}static encode(e){return Be(e)}static decode(e){return X(e)}};var Fe=class extends S.Stream{static{i(this,"ReplayStream")}constructor(e,t,r){super(()=>{},e,t,r,{retransmit:{enabled:!1}}),this.LAST_ACK_TIMEOUT=0}};async function Sr(s,e){let t=new Fe(s.to,s.from,s.flow);await t.init(e),t.transition(S.State.SYN_SENT),t.transmit(s,!1,!0,!1);let r=new Fe(s.from,s.to,s.flow);return await r.init(e),r.listen(),await r.consume(s),{client:t,worker:r}}i(Sr,"streams");function kr(s,e,t,r){let n,a;return s.pipeTo(new WritableStream({write:i(async o=>{o.flow===(r?.flowId??o.flow)&&(o.to.address===e.from.address?await e.consume(o):o.to.address===t.from.address&&await t.consume(o),S.State.ESTABLISHED===e.state&&(n=e.skey,a=e.rkey),n&&(t.skey=a,t.rkey=n))},"write"),close:i(()=>{for(let o of[e,t])o.canceled||(o.controller.close(),o.canceled=!0),o.state!==S.State.CLOSED&&o.transition(S.State.CLOSED)},"close")}))}i(kr,"pipe");async function Tr(s,e){let t,r=s.getReader();try{for(;;){let{done:n,value:a}=await r.read();if(n)break;if(a.flow===(e?.flowId??a.flow)&&a.flags&z.Flag.SYN&&!(a.flags&z.Flag.ACK)){t=a;break}}}finally{r.releaseLock()}return t}i(Tr,"syn");async function xr(s,e,t){let r=await Tr(s,t);if(!r)return;let{client:n,worker:a}=await Sr(r,e),o=new K({MAX_CHUNK_SIZE:-1>>>0,readable:new ReadableStream,writable:new WritableStream,close:i(async()=>{},"close"),connect:i(async()=>{},"connect")},n.from),[,u,c]=await Promise.all([kr(s,n,a,t),new Promise((f,d)=>{o.invoke=(h,g,M)=>{let lr=JSON.stringify({method:h,params:g}),bt=new D(a,new TextEncoder().encode(lr));return bt._readable=M,f(bt),Promise.resolve(new ReadableStream({async start(Et){Et.enqueue(await new F(new Uint8Array(0)).encode()),Et.close()}}))},o.handle(a).catch(d)}),o.result(n,0).catch(f=>{if(!(f instanceof b))throw f;let d=JSON.stringify({error:{code:f.code,message:f.message}});return new D(n,new TextEncoder().encode(d))})]);return{request:u,response:c}}i(xr,"decode");var Cr=ut;var ar={};y(ar,{AuthStatus:()=>nr,Page:()=>ee,types:()=>pt});function Pr(s){return function(...e){var t=e.pop();return s.call(this,e,t)}}i(Pr,"initialParams");var _r=typeof queueMicrotask=="function"&&queueMicrotask,qt=typeof setImmediate=="function"&&setImmediate,Wt=typeof process=="object"&&typeof process.nextTick=="function";function Ht(s){setTimeout(s,0)}i(Ht,"fallback");function $t(s){return(e,...t)=>s(()=>e(...t))}i($t,"wrap");var ge;_r?ge=queueMicrotask:qt?ge=setImmediate:Wt?ge=process.nextTick:ge=Ht;var jt=$t(ge);function Lr(s){return ft(s)?function(...e){let t=e.pop(),r=s.apply(this,e);return Nt(r,t)}:Pr(function(e,t){var r;try{r=s.apply(this,e)}catch(n){return t(n)}if(r&&typeof r.then=="function")return Nt(r,t);t(null,r)})}i(Lr,"asyncify");function Nt(s,e){return s.then(t=>{Mt(e,null,t)},t=>{Mt(e,t&&(t instanceof Error||t.message)?t:new Error(t))})}i(Nt,"handlePromise");function Mt(s,e,t){try{s(e,t)}catch(r){jt(n=>{throw n},r)}}i(Mt,"invokeCallback");function ft(s){return s[Symbol.toStringTag]==="AsyncFunction"}i(ft,"isAsync");function Rr(s){return s[Symbol.toStringTag]==="AsyncGenerator"}i(Rr,"isAsyncGenerator");function Or(s){return typeof s[Symbol.asyncIterator]=="function"}i(Or,"isAsyncIterable");function m(s){if(typeof s!="function")throw new Error("expected a function");return ft(s)?Lr(s):s}i(m,"wrapAsync");function p(s,e){if(e||(e=s.length),!e)throw new Error("arity is undefined");function t(...r){return typeof r[e-1]=="function"?s.apply(this,r):new Promise((n,a)=>{r[e-1]=(o,...u)=>{if(o)return a(o);n(u.length>1?u:u[0])},s.apply(this,r)})}return i(t,"awaitable"),t}i(p,"awaitify");function Yt(s){return i(function(t,...r){return p(function(a){var o=this;return s(t,(u,c)=>{m(u).apply(o,r.concat(c))},a)})},"applyEach")}i(Yt,"applyEach$1");function lt(s,e,t,r){e=e||[];var n=[],a=0,o=m(t);return s(e,(u,c,f)=>{var d=a++;o(u,(h,g)=>{n[d]=g,f(h)})},u=>{r(u,n)})}i(lt,"_asyncMap");function We(s){return s&&typeof s.length=="number"&&s.length>=0&&s.length%1===0}i(We,"isArrayLike");var He={};function J(s){function e(...t){if(s!==null){var r=s;s=null,r.apply(this,t)}}return i(e,"wrapper"),Object.assign(e,s),e}i(J,"once");function Ir(s){return s[Symbol.iterator]&&s[Symbol.iterator]()}i(Ir,"getIterator");function Ur(s){var e=-1,t=s.length;return i(function(){return++e<t?{value:s[e],key:e}:null},"next")}i(Ur,"createArrayIterator");function Dr(s){var e=-1;return i(function(){var r=s.next();return r.done?null:(e++,{value:r.value,key:e})},"next")}i(Dr,"createES2015Iterator");function Kr(s){var e=s?Object.keys(s):[],t=-1,r=e.length;return i(function n(){var a=e[++t];return a==="__proto__"?n():t<r?{value:s[a],key:a}:null},"next")}i(Kr,"createObjectIterator");function Nr(s){if(We(s))return Ur(s);var e=Ir(s);return e?Dr(e):Kr(s)}i(Nr,"createIterator");function Q(s){return function(...e){if(s===null)throw new Error("Callback was already called.");var t=s;s=null,t.apply(this,e)}}i(Q,"onlyOnce");function Bt(s,e,t,r){let n=!1,a=!1,o=!1,u=0,c=0;function f(){u>=e||o||n||(o=!0,s.next().then(({value:g,done:M})=>{if(!(a||n)){if(o=!1,M){n=!0,u<=0&&r(null);return}u++,t(g,c,d),c++,f()}}).catch(h))}i(f,"replenish");function d(g,M){if(u-=1,!a){if(g)return h(g);if(g===!1){n=!0,a=!0;return}if(M===He||n&&u<=0)return n=!0,r(null);f()}}i(d,"iterateeCallback");function h(g){a||(o=!1,n=!0,r(g))}i(h,"handleError"),f()}i(Bt,"asyncEachOfLimit");var C=i(s=>(e,t,r)=>{if(r=J(r),s<=0)throw new RangeError("concurrency limit cannot be less than 1");if(!e)return r(null);if(Rr(e))return Bt(e,s,t,r);if(Or(e))return Bt(e[Symbol.asyncIterator](),s,t,r);var n=Nr(e),a=!1,o=!1,u=0,c=!1;function f(h,g){if(!o)if(u-=1,h)a=!0,r(h);else if(h===!1)a=!0,o=!0;else{if(g===He||a&&u<=0)return a=!0,r(null);c||d()}}i(f,"iterateeCallback");function d(){for(c=!0;u<s&&!a;){var h=n();if(h===null){a=!0,u<=0&&r(null);return}u+=1,t(h.value,h.key,Q(f))}c=!1}i(d,"replenish"),d()},"eachOfLimit$2");function Mr(s,e,t,r){return C(e)(s,m(t),r)}i(Mr,"eachOfLimit");var Gt=p(Mr,4);function Br(s,e,t){t=J(t);var r=0,n=0,{length:a}=s,o=!1;a===0&&t(null);function u(c,f){c===!1&&(o=!0),o!==!0&&(c?t(c):(++n===a||f===He)&&t(null))}for(i(u,"iteratorCallback");r<a;r++)e(s[r],r,Q(u))}i(Br,"eachOfArrayLike");function Fr(s,e,t){return Gt(s,1/0,e,t)}i(Fr,"eachOfGeneric");function qr(s,e,t){var r=We(s)?Br:Fr;return r(s,m(e),t)}i(qr,"eachOf");var q=p(qr,3);function Wr(s,e,t){return lt(q,s,e,t)}i(Wr,"map");var Vt=p(Wr,3),li=Yt(Vt);function Hr(s,e,t){return Gt(s,1,e,t)}i(Hr,"eachOfSeries");var Z=p(Hr,3);function $r(s,e,t){return lt(Z,s,e,t)}i($r,"mapSeries");var jr=p($r,3),hi=Yt(jr),zt=Symbol("promiseCallback");function Ft(){let s,e;function t(r,...n){if(r)return e(r);s(n.length>1?n:n[0])}return i(t,"callback"),t[zt]=new Promise((r,n)=>{s=r,e=n}),t}i(Ft,"promiseCallback");function Yr(s,e,t,r){r=J(r);var n=m(t);return Z(s,(a,o,u)=>{n(e,a,(c,f)=>{e=f,u(c)})},a=>r(a,e))}i(Yr,"reduce");var di=p(Yr,4);function Gr(s,e,t,r){return lt(C(e),s,t,r)}i(Gr,"mapLimit");var Xt=p(Gr,4);function Vr(s,e,t,r){var n=m(t);return Xt(s,e,(a,o)=>{n(a,(u,...c)=>u?o(u):o(u,c))},(a,o)=>{for(var u=[],c=0;c<o.length;c++)o[c]&&(u=u.concat(...o[c]));return r(a,u)})}i(Vr,"concatLimit");var Jt=p(Vr,4);function zr(s,e,t){return Jt(s,1/0,e,t)}i(zr,"concat");var pi=p(zr,3);function Xr(s,e,t){return Jt(s,1,e,t)}i(Xr,"concatSeries");var mi=p(Xr,3);function R(s,e){return(t,r,n,a)=>{var o=!1,u;let c=m(n);t(r,(f,d,h)=>{c(f,(g,M)=>{if(g||g===!1)return h(g);if(s(M)&&!u)return o=!0,u=e(!0,f),h(null,He);h()})},f=>{if(f)return a(f);a(null,o?u:e(!1))})}}i(R,"_createTester");function Jr(s,e,t){return R(r=>r,(r,n)=>n)(q,s,e,t)}i(Jr,"detect");var yi=p(Jr,3);function Qr(s,e,t,r){return R(n=>n,(n,a)=>a)(C(e),s,t,r)}i(Qr,"detectLimit");var wi=p(Qr,4);function Zr(s,e,t){return R(r=>r,(r,n)=>n)(C(1),s,e,t)}i(Zr,"detectSeries");var gi=p(Zr,3);function Qt(s){return(e,...t)=>m(e)(...t,(r,...n)=>{typeof console=="object"&&(r?console.error&&console.error(r):console[s]&&n.forEach(a=>console[s](a)))})}i(Qt,"consoleFunc");var Ai=Qt("dir");function es(s,e,t){t=Q(t);var r=m(s),n=m(e),a;function o(c,...f){if(c)return t(c);c!==!1&&(a=f,n(...f,u))}i(o,"next");function u(c,f){if(c)return t(c);if(c!==!1){if(!f)return t(null,...a);r(o)}}return i(u,"check"),u(null,!0)}i(es,"doWhilst");var vi=p(es,3);function Zt(s){return(e,t,r)=>s(e,r)}i(Zt,"_withoutIndex");function ts(s,e,t){return q(s,Zt(m(e)),t)}i(ts,"eachLimit$2");var bi=p(ts,3);function rs(s,e,t,r){return C(e)(s,Zt(m(t)),r)}i(rs,"eachLimit");var ss=p(rs,4);function ns(s,e,t){return ss(s,1,e,t)}i(ns,"eachSeries");var is=p(ns,3);function as(s){return ft(s)?s:function(...e){var t=e.pop(),r=!0;e.push((...n)=>{r?jt(()=>t(...n)):t(...n)}),s.apply(this,e),r=!1}}i(as,"ensureAsync");function os(s,e,t){return R(r=>!r,r=>!r)(q,s,e,t)}i(os,"every");var Ei=p(os,3);function us(s,e,t,r){return R(n=>!n,n=>!n)(C(e),s,t,r)}i(us,"everyLimit");var Si=p(us,4);function cs(s,e,t){return R(r=>!r,r=>!r)(Z,s,e,t)}i(cs,"everySeries");var ki=p(cs,3);function fs(s,e,t,r){var n=new Array(e.length);s(e,(a,o,u)=>{t(a,(c,f)=>{n[o]=!!f,u(c)})},a=>{if(a)return r(a);for(var o=[],u=0;u<e.length;u++)n[u]&&o.push(e[u]);r(null,o)})}i(fs,"filterArray");function ls(s,e,t,r){var n=[];s(e,(a,o,u)=>{t(a,(c,f)=>{if(c)return u(c);f&&n.push({index:o,value:a}),u(c)})},a=>{if(a)return r(a);r(null,n.sort((o,u)=>o.index-u.index).map(o=>o.value))})}i(ls,"filterGeneric");function $e(s,e,t,r){var n=We(e)?fs:ls;return n(s,e,m(t),r)}i($e,"_filter");function hs(s,e,t){return $e(q,s,e,t)}i(hs,"filter");var Ti=p(hs,3);function ds(s,e,t,r){return $e(C(e),s,t,r)}i(ds,"filterLimit");var xi=p(ds,4);function ps(s,e,t){return $e(Z,s,e,t)}i(ps,"filterSeries");var Ci=p(ps,3);function ms(s,e){var t=Q(e),r=m(as(s));function n(a){if(a)return t(a);a!==!1&&r(n)}return i(n,"next"),n()}i(ms,"forever");var Pi=p(ms,2);function ys(s,e,t,r){var n=m(t);return Xt(s,e,(a,o)=>{n(a,(u,c)=>u?o(u):o(u,{key:c,val:a}))},(a,o)=>{for(var u={},{hasOwnProperty:c}=Object.prototype,f=0;f<o.length;f++)if(o[f]){var{key:d}=o[f],{val:h}=o[f];c.call(u,d)?u[d].push(h):u[d]=[h]}return r(a,u)})}i(ys,"groupByLimit");var _i=p(ys,4);var Li=Qt("log");function ws(s,e,t,r){r=J(r);var n={},a=m(t);return C(e)(s,(o,u,c)=>{a(o,u,(f,d)=>{if(f)return c(f);n[u]=d,c(f)})},o=>r(o,n))}i(ws,"mapValuesLimit");var Ri=p(ws,4);var qe;Wt?qe=process.nextTick:qt?qe=setImmediate:qe=Ht;var Oi=$t(qe),Ii=p((s,e,t)=>{var r=We(e)?[]:{};s(e,(n,a,o)=>{m(n)((u,...c)=>{c.length<2&&([c]=c),r[a]=c,o(u)})},n=>t(n,r))},3);function gs(s,e){if(e=J(e),!Array.isArray(s))return e(new TypeError("First argument to race must be an array of functions"));if(!s.length)return e();for(var t=0,r=s.length;t<r;t++)m(s[t])(e)}i(gs,"race");var Ui=p(gs,2);function ht(s,e,t,r){let n=m(t);return $e(s,e,(a,o)=>{n(a,(u,c)=>{o(u,!c)})},r)}i(ht,"reject$2");function As(s,e,t){return ht(q,s,e,t)}i(As,"reject");var Di=p(As,3);function vs(s,e,t,r){return ht(C(e),s,t,r)}i(vs,"rejectLimit");var Ki=p(vs,4);function bs(s,e,t){return ht(Z,s,e,t)}i(bs,"rejectSeries");var Ni=p(bs,3);function er(s){return function(){return s}}i(er,"constant");var ct=5,tr=0;function rr(s,e,t){var r={times:ct,intervalFunc:er(tr)};if(arguments.length<3&&typeof s=="function"?(t=e||Ft(),e=s):(Es(r,s),t=t||Ft()),typeof e!="function")throw new Error("Invalid arguments for async.retry");var n=m(e),a=1;function o(){n((u,...c)=>{u!==!1&&(u&&a++<r.times&&(typeof r.errorFilter!="function"||r.errorFilter(u))?setTimeout(o,r.intervalFunc(a-1)):t(u,...c))})}return i(o,"retryAttempt"),o(),t[zt]}i(rr,"retry");function Es(s,e){if(typeof e=="object")s.times=+e.times||ct,s.intervalFunc=typeof e.interval=="function"?e.interval:er(+e.interval||tr),s.errorFilter=e.errorFilter;else if(typeof e=="number"||typeof e=="string")s.times=+e||ct;else throw new Error("Invalid arguments for async.retry")}i(Es,"parseTimes");function Ss(s,e,t){return R(Boolean,r=>r)(q,s,e,t)}i(Ss,"some");var Mi=p(Ss,3);function ks(s,e,t,r){return R(Boolean,n=>n)(C(e),s,t,r)}i(ks,"someLimit");var Bi=p(ks,4);function Ts(s,e,t){return R(Boolean,r=>r)(Z,s,e,t)}i(Ts,"someSeries");var Fi=p(Ts,3);function xs(s,e,t){var r=m(e);return Vt(s,(a,o)=>{r(a,(u,c)=>{if(u)return o(u);o(u,{value:a,criteria:c})})},(a,o)=>{if(a)return t(a);t(null,o.sort(n).map(u=>u.value))});function n(a,o){var u=a.criteria,c=o.criteria;return u<c?-1:u>c?1:0}}i(xs,"sortBy");var qi=p(xs,3);function Cs(s,e){var t=null,r;return is(s,(n,a)=>{m(n)((o,...u)=>{if(o===!1)return a(o);u.length<2?[r]=u:r=u,t=o,a(o?null:{})})},()=>e(t,r))}i(Cs,"tryEach");var Wi=p(Cs);function Ps(s,e,t){t=Q(t);var r=m(e),n=m(s),a=[];function o(c,...f){if(c)return t(c);a=f,c!==!1&&n(u)}i(o,"next");function u(c,f){if(c)return t(c);if(c!==!1){if(!f)return t(null,...a);r(o)}}return i(u,"check"),n(u)}i(Ps,"whilst");var Hi=p(Ps,3);function _s(s,e){if(e=J(e),!Array.isArray(s))return e(new Error("First argument to waterfall must be an array of functions"));if(!s.length)return e();var t=0;function r(a){var o=m(s[t++]);o(...a,Q(n))}i(r,"nextTask");function n(a,...o){if(a!==!1){if(a||t===s.length)return e(a,...o);r(o)}}i(n,"next"),r([])}i(_s,"waterfall");var $i=p(_s);var dt={times:600,interval:100},Ls={simulateFramework:!1},Rs={simulateFramework:!1,simulateTyping:!0,triggerEvents:!0},sr={timeout:9e4},nr=(t=>(t.ABORTED="aborted",t.AUTHENTICATED="authenticated",t))(nr||{}),ee=class{static{i(this,"Page")}client;worker;closed=!1;handle;_agent;constructor(e,t,r,n){this.client=e,this.worker=t,this.handle=r,this._agent=n}setAgent(e){this._agent=e}get agent(){if(!this._agent)throw new Error(`Agent is not configured. Install @uplink-code/ai and pass an agent instance when creating the client: | ||
| import ai from '@uplink-code/ai' | ||
| const agent = ai.createAgent({ provider: 'anthropic', options: { apiKey: '...' } }) | ||
| const client = await uplink.client.connect(url, { agent }) | ||
| Or set it directly on the page: page.setAgent(agent)`);return this._agent}async addUserScript(e){await(await this.client.urpc.call(this.worker,"page.addUserScript",[this.handle,e])).close()}async click(e,t=Ls){return(await this.client.urpc.call(this.worker,"page.click",[this.handle,e,t])).value({close:!0})}async close(){this.closed=!0,await this.client.urpc.call(this.worker,"page.close",[this.handle])}async cookies(e){return(await this.client.urpc.call(this.worker,"page.cookies",[this.handle,e])).value({close:!0})}async evaluate(e,...t){let r=`(${e}).apply(null, ${JSON.stringify(t)})`;return(await this.client.urpc.call(this.worker,"page.evaluate",[this.handle,r,[]])).value({close:!0})}async goto(e,t,r=3e4){return(await this.client.urpc.call(this.worker,"page.goto",[this.handle,e,t??{},r])).value({close:!0})}async hide(e=!0){await(await this.client.urpc.call(this.worker,"page.hide",[this.handle,e])).close()}async input(e,t,r=Rs){await(await this.client.urpc.call(this.worker,"page.input",[this.handle,e,t,r])).close()}async events(e=null){let t=[this.handle];return e&&t.push(e),this.client.urpc.call(this.worker,"page.events",t)}async on(e,t){let r=new AbortController,n=r.signal,a=await this.events(e==="xhr"?"dispatch":e),o=a.stream;return await a.value()&&(async()=>{try{let u=await o.read({push:!0});for(;u.byteLength>0&&!n.aborted&&!this.closed;){let c=JSON.parse(new TextDecoder().decode(u));if(e==="xhr"){let f=JSON.parse(c.data);f.type==="xhr"&&await t({type:"xhr",data:f.request})}else await t(c);u=await o.read({push:!0})}}finally{await a.close()}})().catch(u=>{throw u}),r}async off(e){e.abort()}async once(e,t){let r=await this.on(e,async n=>{await this.off(r),await t(n)});return r}async progress(){return(await this.client.urpc.call(this.worker,"page.progress",[this.handle])).value({close:!0})}request(e,t){let r,n,a=!1;return t?.body instanceof ReadableStream?(r=t.body,a=!0):t?.body&&(n=t.body),this.client.urpc.call(this.worker,"page.request",[this.handle,{url:e,method:t?.method??"GET",headers:t?.headers??{},stream:a,data:n}],{stream:r,timeout:t?.timeout})}async waitForRequest(e,t={}){Object.keys(t).length===0&&(t=dt);let r=t.timeout??(t.times??600)*(t.interval??100);return new Promise((n,a)=>{let o=null,u=null,c=i(()=>{o&&this.off(o).catch(d=>{throw d}),u&&clearTimeout(u)},"cleanup"),f=i(d=>{let h=d.data;(typeof e=="string"?h.url===e:e(h))&&(c(),n(h))},"handleRequest");u=setTimeout(()=>{c(),a(new Error("Timed out waiting for request"))},r),this.on("xhr",f).then(d=>{o=d}).catch(d=>{c(),a(d)})})}async screenshot(e=0,t=0,r=.8){return(await this.client.urpc.call(this.worker,"page.screenshot",[this.handle,e,t,r])).value({close:!0})}async select(e,t){await(await this.client.urpc.call(this.worker,"page.select",[this.handle,e,t])).close()}async setCookie(...e){let t=Array.isArray(e)?e:[e];await(await this.client.urpc.call(this.worker,"page.setCookie",[this.handle,t])).close()}async setUserAgent(e){await(await this.client.urpc.call(this.worker,"page.setUserAgent",[this.handle,e])).close()}async show(e=!0){await(await this.client.urpc.call(this.worker,"page.show",[this.handle,e])).close()}async url(){return(await this.client.urpc.call(this.worker,"page.url",[this.handle])).value({close:!0})}resolveWaitForOptions(e){if(e.timeout){let t=e.interval??100;return{times:Math.ceil(e.timeout/t),interval:t}}return e}async waitForSelector(e,t=dt){await(await this.client.urpc.call(this.worker,"page.waitForSelector",[this.handle,e,this.resolveWaitForOptions(t)])).close()}async waitForFunction(e,t=dt,...r){await(await this.client.urpc.call(this.worker,"page.waitForFunction",[this.handle,e.toString(),r,this.resolveWaitForOptions(t)])).close()}async authenticate(e,t,r=sr){return await this.goto(e),await this.waitForAuthentication(t,r)}async waitForAuthentication(e,t=sr){let r=new AbortController;await this.once("closed",()=>{r.abort()});let n=t.timeout||6e4;return await rr({times:n/100,interval:100},async()=>{if(r.signal.aborted)return"aborted";if(!await e(this))throw new Error("Timed out waiting for authentication");return"authenticated"})}async act(e){return await this.agent.act(this,e)}async extract(e,t){return t?await this.agent.extract(this,e,t):await this.agent.extract(this,e)}};var pt={};y(pt,{AuthStatus:()=>ir});var ir=(t=>(t.ABORTED="aborted",t.AUTHENTICATED="authenticated",t))(ir||{});var or={};y(or,{Browser:()=>ee});var ee=class{static{i(this,"Browser")}client;worker;handle;constructor(e,t,r){this.client=e,this.worker=t,this.handle=r}async newPage(){let e=await this.client.urpc.call(this.worker,"browser.newPage",[this.handle]);return new Z(this.client,this.worker,await e.value({close:!0}),this.client.agent)}async pages(){return(await(await this.client.urpc.call(this.worker,"browser.pages",[this.handle])).value({close:!0})).map(r=>new Z(this.client,this.worker,r,this.client.agent))}async close(){return(await this.client.urpc.call(this.worker,"browser.close",[this.handle])).close()}disconnect(){}};var mt={};y(mt,{Client:()=>Ye,ClientWorker:()=>N,connect:()=>je});var N=class{static{i(this,"ClientWorker")}client;address;constructor(e,t){this.client=e,this.address=t}async launch(){let t=await(await this.client.urpc.call(this.address,"uplink.launch",[])).value({close:!0});return new ee(this.client,this.address,t)}async connect(e){let t=await this.browser(e);if(!t)throw new Error(`Browser not found on this worker: ${e}`);return t}async browsers(){return(await(await this.client.urpc.call(this.address,"uplink.browsers",[])).value({close:!0})).map(r=>new ee(this.client,this.address,r))}async browser(e){return(await this.browsers()).find(r=>r.handle===e)}async getDeviceInfo(){return await(await this.client.urpc.call(this.address,"uplink.deviceInfo",[])).value({close:!0})}async terminate(){await(await this.client.urpc.call(this.address,"uplink.terminate",[])).close()}};var Ye=class extends U{static{i(this,"Client")}urpc;transport;address;agent;peerListener;peerGoneListener;constructor(e,t){super(),this.transport=e,this.address=t?.address??A.generate(A.Type.CLIENT),this.agent=t?.agent,this.urpc=new K(e,this.address,{keys:t?.keys})}async init(){await this.urpc.init(),this.setupWorkerConnectionEvents()}setupWorkerConnectionEvents(){this.peerListener=e=>{if(e.address.type()!==A.Type.WORKER)return;this.urpc.socket.announce(e.address);let t=new N(this,e.address);this.emit("worker-connected",t)},this.peerGoneListener=e=>{if(e.address.type()!==A.Type.WORKER)return;let t=new N(this,e.address);this.emit("worker-disconnected",t)},this.urpc.socket.on("peer",this.peerListener),this.urpc.socket.on("peergone",this.peerGoneListener)}services(){let e=[];return this.urpc.socket.peers.map.forEach(t=>{t.address.type()===A.Type.SERVICE&&e.push(t.address)}),e}workers(){let e=[];return this.urpc.socket.peers.map.forEach(t=>{t.address.type()===A.Type.WORKER&&e.push(new N(this,t.address))}),e}script(e,t,r){let n=this.services();if(!n.length)throw this.urpc.socket.discover(A.Address.SERVICE_BROADCAST),new Error("NO SCRIPT SERVERS AVAILABLE");return this.urpc.call(n[0],"script.run",[e.address,t,r])}worker(e){if(e&&e.type()!==A.Type.WORKER)throw new Error(`Expected worker address, got ${e}`);return new Promise(t=>{let r=this.workers();if(e){let a=r.find(o=>o.address===e);if(a){t(a);return}}if(r.length){t(r[0]);return}let n=i(a=>{A.Type.WORKER===a.address.type()&&(e&&e!==a.address||(this.urpc.socket.off("peer",n),t(new N(this,a.address))))},"listener");this.urpc.socket.on("peer",n),this.urpc.socket.discover(A.Address.WORKER_BROADCAST)})}async launch(e){return(await this.worker(e)).launch()}async connect(e,t){return(await this.worker(t)).connect(e)}async browsers(e){return(await this.worker(e)).browsers()}async terminate(e){await(await this.worker(e)).terminate()}async close(){this.peerListener&&(this.urpc.socket.off("peer",this.peerListener),this.peerListener=void 0),this.peerGoneListener&&(this.urpc.socket.off("peergone",this.peerGoneListener),this.peerGoneListener=void 0),await this.urpc.close(),await this.transport.close()}};async function Os(s,e){let t=new Ye(s,e);return await t.init(),t}i(Os,"create");async function je(s,e){let t=new URL(s),n=[`auth-${t.pathname.split("/").pop()??""}`];e?.credential&&n.push(`credential-${e.credential}`);let a=me.ws.create(()=>new WebSocket(`${t.origin}/session`,n));await a.connect();let o=await Os(a,e);return o.urpc.socket.discover(A.Address.SERVICE_BROADCAST),o}i(je,"connect");var fr={};y(fr,{default:()=>vt});var At={};y(At,{DEFAULT_HOST:()=>C,auth:()=>be,request:()=>te,session:()=>$});var be={};y(be,{SCOPES:()=>Ms,clearTokenCache:()=>$s,invalidate:()=>gt,isClientCredentials:()=>ve,token:()=>wt});function W(s){let e=s.reason;return e instanceof Error?e:new DOMException("The operation was aborted","AbortError")}i(W,"abortReason");function ur(s,e){return e?e.aborted?Promise.reject(W(e)):new Promise((t,r)=>{let n=i(()=>{r(W(e))},"onAbort");e.addEventListener("abort",n,{once:!0}),s.then(t,r).finally(()=>{e.removeEventListener("abort",n)})}):s}i(ur,"abortable");function cr(s,e){return e?e.aborted?Promise.reject(W(e)):new Promise((t,r)=>{let n=i(()=>{clearTimeout(o),e.removeEventListener("abort",a)},"finish"),a=i(()=>{n(),r(W(e))},"onAbort"),o=setTimeout(()=>{n(),t()},s);e.addEventListener("abort",a,{once:!0})}):new Promise(t=>{setTimeout(t,s)})}i(cr,"sleep");var R=class extends Error{static{i(this,"ApiError")}status;data;constructor(e,t){super(`API request failed with status ${e}`),this.name="ApiError",this.status=e,this.data=t}};var C="https://api.uplink.build";var Is=3,Us=1e3,Ds=3e4;function Ks(s){let e=s?.trim();if(!e)return;let t=Number(e);if(Number.isFinite(t))return Math.max(0,t*1e3);let r=Date.parse(e);if(!Number.isNaN(r))return Math.max(0,r-Date.now())}i(Ks,"retryAfterMs");function Ns(s,e){let t=Ks(s.headers.get("retry-after"))??Us*2**e;return t<=Ds?t:void 0}i(Ns,"delayFor");async function Ae(s,e){for(let t=0;;t++){let r=await s();if(r.status!==429||t>=Is)return r;let n=Ns(r,t);if(n===void 0)return r;await cr(n,e)}}i(Ae,"withRateLimitRetry");var Ms={SESSIONS_READ:"sessions:read",SESSIONS_WRITE:"sessions:write",SESSIONS_HISTORY_READ:"sessions:history:read",SESSIONS_HISTORY_DELETE:"sessions:history:delete",SESSIONS_DECRYPT:"sessions:decrypt",PROJECTS_READ:"projects:read",PROJECTS_WRITE:"projects:write"},Bs=6e4,Fs=3600,Ge=new Map,H=new Map;function ve(s){return"clientId"in s}i(ve,"isClientCredentials");function qs(s){return s.expiresAt===void 0||s.expiresAt>Date.now()}i(qs,"isFresh");function yt(s,e){return JSON.stringify([e,s.clientId,s.clientSecret,[...s.scope??[]].sort()])}i(yt,"cacheKey");async function Ws(s,e,t){let r=new URLSearchParams({grant_type:"client_credentials",client_id:s.clientId,client_secret:s.clientSecret});s.scope?.length&&r.set("scope",s.scope.join(" "));let n=await Ae(()=>fetch(`${e}/oauth/token`,{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded",accept:"application/json"},body:r.toString(),signal:t}),t),a=await n.json();if(!n.ok)throw new R(n.status,a);if(!a.access_token)throw new R(n.status,{error:"invalid_token_response",error_description:"Token endpoint response is missing access_token"});let o=(typeof a.expires_in=="number"&&a.expires_in>0?a.expires_in:Fs)*1e3,u=Math.min(Bs,o/2);return{token:a.access_token,expiresAt:Date.now()+o-u}}i(Ws,"fetchToken");async function Hs(s,e,t){if(t?.aborted)throw W(t);let r=yt(s,e),n=H.get(r);if(!n){let a=new AbortController,o=Ws(s,e,a.signal).then(u=>(Ge.set(r,u),u)).finally(()=>{H.get(r)?.promise===o&&H.delete(r)});n={promise:o,controller:a,waiters:0},H.set(r,n)}n.waiters++;try{return await ur(n.promise,t)}finally{--n.waiters===0&&t?.aborted&&(H.get(r)===n&&H.delete(r),n.controller.abort(W(t)))}}i(Hs,"exchange");async function wt(s,e={}){if(!ve(s))return s;let t=e.host??C,r=Ge.get(yt(s,t));return r&&qs(r)?r:Hs(s,t,e.signal)}i(wt,"token");function gt(s,e={}){ve(s)&&Ge.delete(yt(s,e.host??C))}i(gt,"invalidate");function $s(){Ge.clear(),H.clear()}i($s,"clearTokenCache");var $={};y($,{create:()=>Ys,details:()=>js,get:()=>Gs});async function te(s,e,t,r){let n=i(async()=>{let{token:o}=await wt(s,{host:e,signal:r.signal});return fetch(`${e}${t}`,{...r,headers:{...r.headers,authorization:`Bearer ${o}`}})},"send"),a=await Ae(n,r.signal);return a.status===401&&ve(s)?(gt(s,{host:e}),Ae(n,r.signal)):a}i(te,"request");async function Ys(s,e={}){let t=e.host??C,r={include:e.include,saveHistory:e.saveHistory,tags:e.tags},n=e.restrict===!1?void 0:e.restrict?.verifier??I.randomUUID();n&&(r.restrict={challenge:btoa(String.fromCharCode(...await I.sha256(n)))}),e.limits&&(r.limits=e.limits);let a=await te(s,t,"/sessions",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(r),signal:e.signal}),o=await a.json();if(!a.ok)throw new R(a.status,o);return o.credential=n,o}i(Ys,"create");async function js(s,e,t){let r=t?.host??C,n=await te(s,r,`/sessions/details/${e}`,{method:"GET",headers:{"content-type":"application/json"}}),a=await n.json();if(!n.ok)throw new R(n.status,a);return a}i(js,"details");async function Gs(s,e,t){let r=t?.host??C,n=new URLSearchParams;t?.include?.ecdh&&n.set("includeEcdh","true"),t?.include?.ecdsa&&n.set("includeEcdsa","true");let a=n.toString(),o=`/sessions/${e}${a?`?${a}`:""}`,u=await te(s,r,o,{method:"GET",headers:{"content-type":"application/json"}}),c=await u.json();if(!u.ok)throw new R(u.status,c);return c}i(Gs,"get");var vt={api:At,client:{connect:je,fromSession:i(async(s,e)=>{let t,r,n=s.keys;if(n){if(n.ecdh){let a=await G(Uint8Array.from(atob(n.ecdh.public),u=>u.charCodeAt(0)),!0);r={privateKey:await Te(Uint8Array.from(atob(n.ecdh.private),u=>u.charCodeAt(0)),!1),publicKey:a}}if(n.ecdsa){let a=await j(Uint8Array.from(atob(n.ecdsa.public),u=>u.charCodeAt(0)),!0);t={privateKey:await ke(Uint8Array.from(atob(n.ecdsa.private),u=>u.charCodeAt(0)),!1),publicKey:a}}}return je(s.sessionUrl,{credential:s.credential,keys:{ecdsa:t,ecdh:r},...e})},"fromSession")},crypto:{generateECDHKeyPair:ie,generateECDSAKeyPair:ne,importPKCS8ECDHPrivateKey:Te,importPKCS8ECDSAPrivateKey:ke,importRawECDHPublicKey:G,importRawECDSAPublicKey:j},token:be.token,session:$.create,sessionDetails:$.details,getSession:$.get};var Ua=vt;export{or as browser,mt as client,Ua as default,ar as page,ot as ump,fr as uplink,Kt as urpc}; | ||
| Or set it directly on the page: page.setAgent(agent)`);return this._agent}async addUserScript(e){await(await this.client.urpc.call(this.worker,"page.addUserScript",[this.handle,e])).close()}async click(e,t=Ls){return(await this.client.urpc.call(this.worker,"page.click",[this.handle,e,t])).value({close:!0})}async close(){this.closed=!0,await this.client.urpc.call(this.worker,"page.close",[this.handle])}async cookies(e){return(await this.client.urpc.call(this.worker,"page.cookies",[this.handle,e])).value({close:!0})}async evaluate(e,...t){let r=`(${e}).apply(null, ${JSON.stringify(t)})`;return(await this.client.urpc.call(this.worker,"page.evaluate",[this.handle,r,[]])).value({close:!0})}async goto(e,t,r=3e4){return(await this.client.urpc.call(this.worker,"page.goto",[this.handle,e,t??{},r])).value({close:!0})}async hide(e=!0){await(await this.client.urpc.call(this.worker,"page.hide",[this.handle,e])).close()}async input(e,t,r=Rs){await(await this.client.urpc.call(this.worker,"page.input",[this.handle,e,t,r])).close()}async events(e=null){let t=[this.handle];return e&&t.push(e),this.client.urpc.call(this.worker,"page.events",t)}async on(e,t){let r=new AbortController,n=r.signal,a=await this.events(e==="xhr"?"dispatch":e),o=a.stream;return await a.value()&&(async()=>{try{let u=await o.read({push:!0});for(;u.byteLength>0&&!n.aborted&&!this.closed;){let c=JSON.parse(new TextDecoder().decode(u));if(e==="xhr"){let f=JSON.parse(c.data);f.type==="xhr"&&await t({type:"xhr",data:f.request})}else await t(c);u=await o.read({push:!0})}}finally{await a.close()}})().catch(u=>{throw u}),r}async off(e){e.abort()}async once(e,t){let r=await this.on(e,async n=>{await this.off(r),await t(n)});return r}async progress(){return(await this.client.urpc.call(this.worker,"page.progress",[this.handle])).value({close:!0})}request(e,t){let r,n,a=!1;return t?.body instanceof ReadableStream?(r=t.body,a=!0):t?.body&&(n=t.body),this.client.urpc.call(this.worker,"page.request",[this.handle,{url:e,method:t?.method??"GET",headers:t?.headers??{},stream:a,data:n}],{stream:r,timeout:t?.timeout})}async waitForRequest(e,t={}){Object.keys(t).length===0&&(t=dt);let r=t.timeout??(t.times??600)*(t.interval??100);return new Promise((n,a)=>{let o=null,u=null,c=i(()=>{o&&this.off(o).catch(d=>{throw d}),u&&clearTimeout(u)},"cleanup"),f=i(d=>{let h=d.data;(typeof e=="string"?h.url===e:e(h))&&(c(),n(h))},"handleRequest");u=setTimeout(()=>{c(),a(new Error("Timed out waiting for request"))},r),this.on("xhr",f).then(d=>{o=d}).catch(d=>{c(),a(d)})})}async screenshot(e=0,t=0,r=.8){return(await this.client.urpc.call(this.worker,"page.screenshot",[this.handle,e,t,r])).value({close:!0})}async select(e,t){await(await this.client.urpc.call(this.worker,"page.select",[this.handle,e,t])).close()}async setCookie(...e){let t=Array.isArray(e)?e:[e];await(await this.client.urpc.call(this.worker,"page.setCookie",[this.handle,t])).close()}async setUserAgent(e){await(await this.client.urpc.call(this.worker,"page.setUserAgent",[this.handle,e])).close()}async show(e=!0){await(await this.client.urpc.call(this.worker,"page.show",[this.handle,e])).close()}async url(){return(await this.client.urpc.call(this.worker,"page.url",[this.handle])).value({close:!0})}resolveWaitForOptions(e){if(e.timeout){let t=e.interval??100;return{times:Math.ceil(e.timeout/t),interval:t}}return e}async waitForSelector(e,t=dt){await(await this.client.urpc.call(this.worker,"page.waitForSelector",[this.handle,e,this.resolveWaitForOptions(t)])).close()}async waitForFunction(e,t=dt,...r){await(await this.client.urpc.call(this.worker,"page.waitForFunction",[this.handle,e.toString(),r,this.resolveWaitForOptions(t)])).close()}async authenticate(e,t,r=sr){return await this.goto(e),await this.waitForAuthentication(t,r)}async waitForAuthentication(e,t=sr){let r=new AbortController;await this.once("closed",()=>{r.abort()});let n=t.timeout||6e4;return await rr({times:n/100,interval:100},async()=>{if(r.signal.aborted)return"aborted";if(!await e(this))throw new Error("Timed out waiting for authentication");return"authenticated"})}async act(e){return await this.agent.act(this,e)}async extract(e,t){return t?await this.agent.extract(this,e,t):await this.agent.extract(this,e)}};var pt={};y(pt,{AuthStatus:()=>ir});var ir=(t=>(t.ABORTED="aborted",t.AUTHENTICATED="authenticated",t))(ir||{});var or={};y(or,{Browser:()=>te});var te=class{static{i(this,"Browser")}client;worker;handle;constructor(e,t,r){this.client=e,this.worker=t,this.handle=r}async newPage(){let e=await this.client.urpc.call(this.worker,"browser.newPage",[this.handle]);return new ee(this.client,this.worker,await e.value({close:!0}),this.client.agent)}async pages(){return(await(await this.client.urpc.call(this.worker,"browser.pages",[this.handle])).value({close:!0})).map(r=>new ee(this.client,this.worker,r,this.client.agent))}async close(){return(await this.client.urpc.call(this.worker,"browser.close",[this.handle])).close()}disconnect(){}};var mt={};y(mt,{Client:()=>je,ClientWorker:()=>N,connect:()=>Ye});var N=class{static{i(this,"ClientWorker")}client;address;constructor(e,t){this.client=e,this.address=t}async launch(){let t=await(await this.client.urpc.call(this.address,"uplink.launch",[])).value({close:!0});return new te(this.client,this.address,t)}async connect(e){let t=await this.browser(e);if(!t)throw new Error(`Browser not found on this worker: ${e}`);return t}async browsers(){return(await(await this.client.urpc.call(this.address,"uplink.browsers",[])).value({close:!0})).map(r=>new te(this.client,this.address,r))}async browser(e){return(await this.browsers()).find(r=>r.handle===e)}async getDeviceInfo(){return await(await this.client.urpc.call(this.address,"uplink.deviceInfo",[])).value({close:!0})}async terminate(){await(await this.client.urpc.call(this.address,"uplink.terminate",[])).close()}};var je=class extends U{static{i(this,"Client")}urpc;transport;address;agent;peerListener;peerGoneListener;constructor(e,t){super(),this.transport=e,this.address=t?.address??A.generate(A.Type.CLIENT),this.agent=t?.agent,this.urpc=new K(e,this.address,{keys:t?.keys})}async init(){await this.urpc.init(),this.setupWorkerConnectionEvents()}setupWorkerConnectionEvents(){this.peerListener=e=>{if(e.address.type()!==A.Type.WORKER)return;this.urpc.socket.announce(e.address);let t=new N(this,e.address);this.emit("worker-connected",t)},this.peerGoneListener=e=>{if(e.address.type()!==A.Type.WORKER)return;let t=new N(this,e.address);this.emit("worker-disconnected",t)},this.urpc.socket.on("peer",this.peerListener),this.urpc.socket.on("peergone",this.peerGoneListener)}services(){let e=[];return this.urpc.socket.peers.map.forEach(t=>{t.address.type()===A.Type.SERVICE&&e.push(t.address)}),e}workers(){let e=[];return this.urpc.socket.peers.map.forEach(t=>{t.address.type()===A.Type.WORKER&&e.push(new N(this,t.address))}),e}script(e,t,r){let n=this.services();if(!n.length)throw this.urpc.socket.discover(A.Address.SERVICE_BROADCAST),new Error("NO SCRIPT SERVERS AVAILABLE");return this.urpc.call(n[0],"script.run",[e.address,t,r])}worker(e){if(e&&e.type()!==A.Type.WORKER)throw new Error(`Expected worker address, got ${e}`);return new Promise(t=>{let r=this.workers();if(e){let a=r.find(o=>o.address===e);if(a){t(a);return}}if(r.length){t(r[0]);return}let n=i(a=>{A.Type.WORKER===a.address.type()&&(e&&e!==a.address||(this.urpc.socket.off("peer",n),t(new N(this,a.address))))},"listener");this.urpc.socket.on("peer",n),this.urpc.socket.discover(A.Address.WORKER_BROADCAST)})}async launch(e){return(await this.worker(e)).launch()}async connect(e,t){return(await this.worker(t)).connect(e)}async browsers(e){return(await this.worker(e)).browsers()}async terminate(e){await(await this.worker(e)).terminate()}async close(){this.peerListener&&(this.urpc.socket.off("peer",this.peerListener),this.peerListener=void 0),this.peerGoneListener&&(this.urpc.socket.off("peergone",this.peerGoneListener),this.peerGoneListener=void 0),await this.urpc.close(),await this.transport.close()}};async function Os(s,e){let t=new je(s,e);return await t.init(),t}i(Os,"create");async function Ye(s,e){let t=new URL(s),n=[`auth-${t.pathname.split("/").pop()??""}`];e?.credential&&n.push(`credential-${e.credential}`);let a=me.ws.create(()=>new WebSocket(`${t.origin}/session`,n));await a.connect();let o=await Os(a,e);return o.urpc.socket.discover(A.Address.SERVICE_BROADCAST),o}i(Ye,"connect");var fr={};y(fr,{default:()=>vt});var At={};y(At,{DEFAULT_HOST:()=>k,auth:()=>be,request:()=>$,session:()=>j});var be={};y(be,{SCOPES:()=>Ms,clearTokenCache:()=>$s,invalidate:()=>gt,isClientCredentials:()=>ve,token:()=>wt});function W(s){let e=s.reason;return e instanceof Error?e:new DOMException("The operation was aborted","AbortError")}i(W,"abortReason");function ur(s,e){return e?e.aborted?Promise.reject(W(e)):new Promise((t,r)=>{let n=i(()=>{r(W(e))},"onAbort");e.addEventListener("abort",n,{once:!0}),s.then(t,r).finally(()=>{e.removeEventListener("abort",n)})}):s}i(ur,"abortable");function cr(s,e){return e?e.aborted?Promise.reject(W(e)):new Promise((t,r)=>{let n=i(()=>{clearTimeout(o),e.removeEventListener("abort",a)},"finish"),a=i(()=>{n(),r(W(e))},"onAbort"),o=setTimeout(()=>{n(),t()},s);e.addEventListener("abort",a,{once:!0})}):new Promise(t=>{setTimeout(t,s)})}i(cr,"sleep");var P=class extends Error{static{i(this,"ApiError")}status;data;constructor(e,t){super(`API request failed with status ${e}`),this.name="ApiError",this.status=e,this.data=t}};var k="https://api.uplink.build";var Is=3,Us=1e3,Ds=3e4;function Ks(s){let e=s?.trim();if(!e)return;let t=Number(e);if(Number.isFinite(t))return Math.max(0,t*1e3);let r=Date.parse(e);if(!Number.isNaN(r))return Math.max(0,r-Date.now())}i(Ks,"retryAfterMs");function Ns(s,e){let t=Ks(s.headers.get("retry-after"))??Us*2**e;return t<=Ds?t:void 0}i(Ns,"delayFor");async function Ae(s,e){for(let t=0;;t++){let r=await s();if(r.status!==429||t>=Is)return r;let n=Ns(r,t);if(n===void 0)return r;await cr(n,e)}}i(Ae,"withRateLimitRetry");var Ms={SESSIONS_READ:"sessions:read",SESSIONS_WRITE:"sessions:write",SESSIONS_HISTORY_READ:"sessions:history:read",SESSIONS_HISTORY_DELETE:"sessions:history:delete",SESSIONS_DECRYPT:"sessions:decrypt",PROJECTS_READ:"projects:read",PROJECTS_WRITE:"projects:write"},Bs=6e4,Fs=3600,Ge=new Map,H=new Map;function ve(s){return"clientId"in s}i(ve,"isClientCredentials");function qs(s){return s.expiresAt===void 0||s.expiresAt>Date.now()}i(qs,"isFresh");function yt(s,e){return JSON.stringify([e,s.clientId,s.clientSecret,[...s.scope??[]].sort()])}i(yt,"cacheKey");async function Ws(s,e,t){let r=new URLSearchParams({grant_type:"client_credentials",client_id:s.clientId,client_secret:s.clientSecret});s.scope?.length&&r.set("scope",s.scope.join(" "));let n=await Ae(()=>fetch(`${e}/oauth/token`,{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded",accept:"application/json"},body:r.toString(),signal:t}),t),a=await n.json();if(!n.ok)throw new P(n.status,a);if(!a.access_token)throw new P(n.status,{error:"invalid_token_response",error_description:"Token endpoint response is missing access_token"});let o=(typeof a.expires_in=="number"&&a.expires_in>0?a.expires_in:Fs)*1e3,u=Math.min(Bs,o/2);return{token:a.access_token,expiresAt:Date.now()+o-u}}i(Ws,"fetchToken");async function Hs(s,e,t){if(t?.aborted)throw W(t);let r=yt(s,e),n=H.get(r);if(!n){let a=new AbortController,o=Ws(s,e,a.signal).then(u=>(Ge.set(r,u),u)).finally(()=>{H.get(r)?.promise===o&&H.delete(r)});n={promise:o,controller:a,waiters:0},H.set(r,n)}n.waiters++;try{return await ur(n.promise,t)}finally{--n.waiters===0&&t?.aborted&&(H.get(r)===n&&H.delete(r),n.controller.abort(W(t)))}}i(Hs,"exchange");async function wt(s,e={}){if(!ve(s))return s;let t=e.host??k,r=Ge.get(yt(s,t));return r&&qs(r)?r:Hs(s,t,e.signal)}i(wt,"token");function gt(s,e={}){ve(s)&&Ge.delete(yt(s,e.host??k))}i(gt,"invalidate");function $s(){Ge.clear(),H.clear()}i($s,"clearTokenCache");var j={};y(j,{create:()=>js,deleteHistory:()=>Gs,details:()=>Ys,get:()=>Vs});async function $(s,e,t,r){let n=i(async()=>{let{token:o}=await wt(s,{host:e,signal:r.signal});return fetch(`${e}${t}`,{...r,headers:{...r.headers,authorization:`Bearer ${o}`}})},"send"),a=await Ae(n,r.signal);return a.status===401&&ve(s)?(gt(s,{host:e}),Ae(n,r.signal)):a}i($,"request");async function js(s,e={}){let t=e.host??k,r={include:e.include,saveHistory:e.saveHistory,tags:e.tags},n=e.restrict===!1?void 0:e.restrict?.verifier??I.randomUUID();n&&(r.restrict={challenge:btoa(String.fromCharCode(...await I.sha256(n)))}),e.limits&&(r.limits=e.limits);let a=await $(s,t,"/sessions",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(r),signal:e.signal}),o=await a.json();if(!a.ok)throw new P(a.status,o);return o.credential=n,o}i(js,"create");async function Ys(s,e,t){let r=t?.host??k,n=await $(s,r,`/sessions/details/${e}`,{method:"GET",headers:{"content-type":"application/json"}}),a=await n.json();if(!n.ok)throw new P(n.status,a);return a}i(Ys,"details");async function Gs(s,e,t){let r=t?.host??k,n=await $(s,r,`/sessions/${e}/history`,{method:"DELETE",headers:{"content-type":"application/json"},signal:t?.signal});if(!n.ok){let a=await n.json().catch(()=>{});throw new P(n.status,a)}}i(Gs,"deleteHistory");async function Vs(s,e,t){let r=t?.host??k,n=new URLSearchParams;t?.include?.ecdh&&n.set("includeEcdh","true"),t?.include?.ecdsa&&n.set("includeEcdsa","true");let a=n.toString(),o=`/sessions/${e}${a?`?${a}`:""}`,u=await $(s,r,o,{method:"GET",headers:{"content-type":"application/json"}}),c=await u.json();if(!u.ok)throw new P(u.status,c);return c}i(Vs,"get");var vt={api:At,client:{connect:Ye,fromSession:i(async(s,e)=>{let t,r,n=s.keys;if(n){if(n.ecdh){let a=await V(Uint8Array.from(atob(n.ecdh.public),u=>u.charCodeAt(0)),!0);r={privateKey:await Te(Uint8Array.from(atob(n.ecdh.private),u=>u.charCodeAt(0)),!1),publicKey:a}}if(n.ecdsa){let a=await G(Uint8Array.from(atob(n.ecdsa.public),u=>u.charCodeAt(0)),!0);t={privateKey:await ke(Uint8Array.from(atob(n.ecdsa.private),u=>u.charCodeAt(0)),!1),publicKey:a}}}return Ye(s.sessionUrl,{credential:s.credential,keys:{ecdsa:t,ecdh:r},...e})},"fromSession")},crypto:{generateECDHKeyPair:ie,generateECDSAKeyPair:ne,importPKCS8ECDHPrivateKey:Te,importPKCS8ECDSAPrivateKey:ke,importRawECDHPublicKey:V,importRawECDSAPublicKey:G},token:be.token,session:j.create,sessionDetails:j.details,getSession:j.get};var Da=vt;export{or as browser,mt as client,Da as default,ar as page,ot as ump,fr as uplink,Kt as urpc}; |
@@ -75,2 +75,10 @@ import { type Auth } from './auth.ts'; | ||
| }): Promise<SessionDetails>; | ||
| /** | ||
| * Delete all flow history for a session. Throws an `ApiError` with status 409 | ||
| * if any flow is still in progress. | ||
| */ | ||
| export declare function deleteHistory(auth: Auth, sessionId: string, options?: { | ||
| host?: string; | ||
| signal?: AbortSignal; | ||
| }): Promise<void>; | ||
| export declare function get(auth: Auth, sessionId: string, options?: { | ||
@@ -77,0 +85,0 @@ host?: string; |
+1
-1
| { | ||
| "name": "@uplink-code/uplink", | ||
| "version": "0.14.0", | ||
| "version": "0.15.0", | ||
| "type": "module", | ||
@@ -5,0 +5,0 @@ "exports": { |
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
103401
0.53%1042
0.87%