New:Socket for Asana Is Now Available.Learn more
Get Started

@uplink-code/uplink

Package Overview
Dependencies
Maintainers
4
Versions
18
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@uplink-code/uplink - npm Package Compare versions

Comparing version
0.14.0
to
0.15.0
+2
-2
lib/uplink/index.js

@@ -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;

{
"name": "@uplink-code/uplink",
"version": "0.14.0",
"version": "0.15.0",
"type": "module",

@@ -5,0 +5,0 @@ "exports": {