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.13.0
to
0.14.0
+7
lib/uplink/src/api/abort.d.ts
/** The reason an AbortSignal carries, normalized to an Error. */
export declare function abortReason(signal: AbortSignal): Error;
/** Settle as soon as `signal` aborts, leaving `promise` itself undisturbed. */
export declare function abortable<T>(promise: Promise<T>, signal?: AbortSignal): Promise<T>;
/** Wait `ms`, rejecting early if `signal` aborts. */
export declare function sleep(ms: number, signal?: AbortSignal): Promise<void>;
//# sourceMappingURL=abort.d.ts.map
/** The scopes an access token can carry. */
export declare const SCOPES: {
readonly SESSIONS_READ: "sessions:read";
readonly SESSIONS_WRITE: "sessions:write";
readonly SESSIONS_HISTORY_READ: "sessions:history:read";
readonly SESSIONS_HISTORY_DELETE: "sessions:history:delete";
readonly SESSIONS_DECRYPT: "sessions:decrypt";
readonly PROJECTS_READ: "projects:read";
readonly PROJECTS_WRITE: "projects:write";
};
/** A single scope value, e.g. `sessions:read`. */
export type Scope = (typeof SCOPES)[keyof typeof SCOPES];
/** OAuth 2.0 client credentials grant (RFC 6749 §4.4). */
export interface ClientCredentials {
clientId: string;
clientSecret: string;
/** Scopes to request. Omit to let the server decide. */
scope?: Scope[];
}
/** An access token, as returned by {@link token}. */
export interface Token {
token: string;
/**
* Epoch ms after which the token must not be reused. Absent when the
* lifetime is unknown, as for a token supplied by the caller.
*/
expiresAt?: number;
}
/**
* Authentication for API requests: an access token, or client credentials that
* the SDK exchanges for one at the token endpoint.
*/
export type Auth = Token | ClientCredentials;
/** Whether `auth` can mint a fresh token, rather than carrying a fixed one. */
export declare function isClientCredentials(auth: Auth): auth is ClientCredentials;
/**
* Resolve `auth` to an access token, running the client credentials flow and
* caching the result when credentials are supplied. A token that was already
* obtained is returned as-is, so the result can be passed back as `Auth` to
* reuse it across requests.
*/
export declare function token(auth: Auth, options?: {
host?: string;
signal?: AbortSignal;
}): Promise<Token>;
/** Drop any cached token for these credentials, forcing a fresh exchange. */
export declare function invalidate(auth: Auth, options?: {
host?: string;
}): void;
/** Clear every cached token. Primarily useful in tests. */
export declare function clearTokenCache(): void;
//# sourceMappingURL=auth.d.ts.map
/** Where the Uplink API lives, absent an explicit override. */
export declare const DEFAULT_HOST = "https://api.uplink.build";
//# sourceMappingURL=host.d.ts.map
/**
* Send, waiting out any 429 for as long as the server asks. Gives up after
* MAX_RETRIES — or straight away if the requested delay is longer than we are
* willing to sleep — handing the response back for the caller to deal with.
*/
export declare function withRateLimitRetry(send: () => Promise<Response>, signal?: AbortSignal): Promise<Response>;
//# sourceMappingURL=rate-limit.d.ts.map
import { type Auth } from './auth.ts';
export { DEFAULT_HOST } from './host.ts';
interface RequestOptions {
method: string;
headers?: Record<string, string>;
body?: string;
signal?: AbortSignal;
}
/**
* Perform an API request with a bearer token derived from `auth`. A cached
* token that the server rejects is discarded and the request retried once, and
* a rate-limited request is retried after the delay the server asks for.
*/
export declare function request(auth: Auth, host: string, path: string, options: RequestOptions): Promise<Response>;
//# sourceMappingURL=request.d.ts.map
+2
-2

@@ -1,5 +0,5 @@

var ht=Object.defineProperty;var i=(s,e)=>ht(s,"name",{value:e,configurable:!0});var y=(s,e)=>{for(var t in e)ht(s,t,{get:e[t],enumerable:!0})};var Ze={};y(Ze,{address:()=>A,krypto:()=>I,packet:()=>$,socket:()=>S,transform:()=>N,transport:()=>le,util:()=>E});var S={};y(S,{Mode:()=>vt,Peer:()=>re,Shutdown:()=>bt,Socket:()=>Je,State:()=>l,Stream:()=>oe});var E={};y(E,{compress:()=>me,concat:()=>Q,decompress:()=>ye,iterateStream:()=>qe,random:()=>L});function Q(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(Q,"concat");function L(){return Math.random()*4294967295>>>0}i(L,"random");async function*qe(s){let e=s.getReader();try{for(;;){let{done:t,value:r}=await e.read();if(t)break;yield r}}finally{e.releaseLock()}}i(qe,"iterateStream");async function me(s){let e=new ReadableStream({start(r){r.enqueue(s),r.close()}}).pipeThrough(new CompressionStream("deflate-raw")),t=[];for await(let r of qe(e))t.push(r);return Q(t)}i(me,"compress");async function ye(s){let e=new ReadableStream({start(r){r.enqueue(s),r.close()}}).pipeThrough(new DecompressionStream("deflate-raw")),t=[];for await(let r of qe(e))t.push(r);return Q(t)}i(ye,"decompress");var Z=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:()=>Ee,deriveFlowEncryptionKey:()=>Fe,encrypt:()=>be,exportRawKey:()=>F,generateDataKey:()=>dt,generateECDHKeyPair:()=>te,generateECDSAKeyPair:()=>ee,generateEncryptionKey:()=>mt,generateSalt:()=>pt,importPKCS8ECDHPrivateKey:()=>ge,importPKCS8ECDSAPrivateKey:()=>we,importRawECDHPublicKey:()=>H,importRawECDSAPublicKey:()=>W,randomUUID:()=>er,sha256:()=>Zt,sign:()=>Ae,verify:()=>ve});async function F(s){return new Uint8Array(await crypto.subtle.exportKey("raw",s))}i(F,"exportRawKey");function ee(s=!1){return crypto.subtle.generateKey({name:"ECDSA",namedCurve:"P-256"},s,["sign","verify"])}i(ee,"generateECDSAKeyPair");function W(s,e=!1){return crypto.subtle.importKey("raw",s,{name:"ECDSA",namedCurve:"P-256"},e,["verify"])}i(W,"importRawECDSAPublicKey");function we(s,e=!1){return crypto.subtle.importKey("pkcs8",s,{name:"ECDSA",namedCurve:"P-256"},e,["sign"])}i(we,"importPKCS8ECDSAPrivateKey");function H(s,e=!1){return crypto.subtle.importKey("raw",s,{name:"ECDH",namedCurve:"P-256"},e,[])}i(H,"importRawECDHPublicKey");function ge(s,e=!1){return crypto.subtle.importKey("pkcs8",s,{name:"ECDH",namedCurve:"P-256"},e,["deriveBits","deriveKey"])}i(ge,"importPKCS8ECDHPrivateKey");function te(s=!1){return crypto.subtle.generateKey({name:"ECDH",namedCurve:"P-256"},s,["deriveBits","deriveKey"])}i(te,"generateECDHKeyPair");function dt(s,e){return crypto.subtle.deriveKey({name:"ECDH",public:e},s,{name:"HKDF",hash:"SHA-512"},!1,["deriveBits","deriveKey"])}i(dt,"generateDataKey");function pt(s,e){return crypto.subtle.deriveBits({name:"HKDF",hash:"SHA-512",salt:new ArrayBuffer,info:e},s,512)}i(pt,"generateSalt");function mt(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(mt,"generateEncryptionKey");function Ae(s,e){return crypto.subtle.sign({name:"ECDSA",hash:"SHA-256"},s,e)}i(Ae,"sign");function ve(s,e,t){return crypto.subtle.verify({name:"ECDSA",hash:"SHA-256"},s,e,t)}i(ve,"verify");var k=16;async function be(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(be,"encrypt");function Ee(s,e,t){return crypto.subtle.decrypt({name:"AES-CBC",iv:e},s,t)}i(Ee,"decrypt");async function Fe(s,e,t,r,n=!1){let a=await dt(s,e),o=new ArrayBuffer(8),u=new DataView(o);u.setUint32(0,t),u.setUint32(4,r);let c=await pt(a,o);return mt(a,c,n)}i(Fe,"deriveFlowEncryptionKey");async function Zt(s){return new Uint8Array(await crypto.subtle.digest("SHA-256",new TextEncoder().encode(s)))}i(Zt,"sha256");function er(){return crypto.randomUUID()}i(er,"randomUUID");var re=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 W(e.payload))}};var O=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:()=>C,ADDRESS_TYPE_MASK:()=>We,Address:()=>w,Type:()=>Se,from:()=>tr,generate:()=>rr});var Se=(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))(Se||{}),We=4026531840,C=268435455,w=class s{constructor(e){this.address=e}static{i(this,"Address")}static BROADCAST=s.from(4294967295);static RELAY_BROADCAST=s.from(0|C);static CLIENT_BROADCAST=s.from(268435456|C);static WORKER_BROADCAST=s.from(536870912|C);static SERVICE_BROADCAST=s.from(805306368|C);hash(){return this.address}static from(e){return new s(e)}static generate(e){let t;do t=new s((L()&C|e)>>>0);while(s.isBroadcast(t.address));return t}static isBroadcast(e){return(e&C)===C}isBroadcast(){return s.isBroadcast(this.address)}type(){return(this.address&We)>>>0}broadcast(){return(this.address|C)>>>0}match(e,t=!0){return this.address===e.address||t&&(this.broadcast()===e.address||e.address===4294967295)}toString(){return`${Se[(this.address&We)>>>0]??Se[this.address]??"UNK"} <${this.address.toString(16).padStart(8,"0")}>`}};function tr(s){return w.from(s)}i(tr,"from");function rr(s){return w.generate(s)}i(rr,"generate");var $={};y($,{Flag:()=>ae,Offset:()=>wt,PKT_DEFAULT_MSS:()=>yt,PKT_HEADER_LEN:()=>T,PKT_MAGIC:()=>se,PKT_OVERHEAD_MAX:()=>Te,PKT_SIGNATURE_LEN:()=>ne,PacketCopy:()=>Ge,PacketZero:()=>ie,Type:()=>Ve,create:()=>v,decode:()=>je,packetize:()=>Ye});var se=85,yt=1024,Ve=(r=>(r[r.ANNOUNCE=0]="ANNOUNCE",r[r.DISCOVER=1]="DISCOVER",r[r.DISONNECT=2]="DISONNECT",r))(Ve||{}),ae=(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))(ae||{}),wt=(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))(wt||{}),T=88,ne=64,Te=T+k+16,ke=new Uint8Array(ne),ie=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,se),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+ne)}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 me(this.payload);e.byteLength>=this.payload.byteLength||(this.flags|=128,this.payload=e)}async decompress(){this.flags&128&&(this.payload=await ye(this.payload),this.flags&=-129)}async encrypt(e){let{iv:t,ciphertext:r}=await be(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 Ee(e,t,r))}async sign(e){return this.signature=ke,this.signature=new Uint8Array(await Ae(e,this.encode()))}async verify(...e){let t=new Uint8Array(this.signature);this.signature=ke;let r=!1;for(let n of e)if(r=await ve(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+ne)),this.data}static decode(e){if(e.byteLength<T)return null;let t=new s({buffer:e});return t.magic!==se?null:t}},He=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}},$e=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}},Ge=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 me(this.payload);e.byteLength>=this.payload.byteLength||(this.flags|=128,this.payload=e)}async decompress(){this.flags&128&&(this.payload=await ye(this.payload),this.flags&=-129)}async encrypt(e){let{iv:t,ciphertext:r}=await be(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 Ee(e,t,r))}async sign(e){return this.signature=ke,this.signature=new Uint8Array(await Ae(e,this.encode()))}async verify(...e){let t=new Uint8Array(this.signature);this.signature=ke;let r=!1;for(let n of e)if(r=await ve(n,t,this.encode()),r)break;return this.signature=t,r}encode(){let e=new Uint8Array(T+this.payload.byteLength),t=new $e(e.buffer);return t.uint8(se),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 He(t),n=new s;return t.byteLength<T||r.uint8()!=se||(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(ne),n.payload=new Uint8Array(t,r.offset),r.offset!=T)?null:n}};function v(s){return new ie(s)}i(v,"create");function je(s){return ie.decode(s)}i(je,"decode");function*Ye(s,e){let t=e?.limit??yt,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(Ye,"packetize");function At(s,e){return s-e>>>0>=2147483648}i(At,"LT");function gt(s,e){return!At(e,s)}i(gt,"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},vt=(r=>(r[r.NONE=0]="NONE",r[r.READ=1]="READ",r[r.WRITE=2]="WRITE",r))(vt||{}),bt=(r=>(r[r.READ=0]="READ",r[r.WRITE=1]="WRITE",r[r.RDWR=2]="RDWR",r))(bt||{}),oe=class extends O{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 te()}async deriveEncryptionKey(e,t){let r=await H(e.payload);return Fe(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 Q(t)}async send(e,t){if(!(this.mode&2))throw new Error(`Writing to RO Stream ${this.mode}`);await this.establish(),await this.write(Ye(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=>At(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),gt(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&&gt(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){F(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 N={};y(N,{decoder:()=>fe,encoder:()=>ce,signer:()=>ue,unwrap:()=>ze,unwrapLengthPrefix:()=>Xe});var ue={};y(ue,{Signer:()=>xe,transform:()=>sr});var xe=class{static{i(this,"Signer")}secret;constructor(e){this.secret=e}async transform(e,t){await e.sign(this.secret),t.enqueue(e)}};function sr(s){return new TransformStream(new xe(s))}i(sr,"transform");var ce={};y(ce,{PacketToUint8Array:()=>Ce,transform:()=>nr});var Ce=class{static{i(this,"PacketToUint8Array")}transform(e,t){t.enqueue(e.encode())}};function nr(){return new TransformStream(new Ce)}i(nr,"transform");var fe={};y(fe,{Uint8ArrayToPacket:()=>Pe,transform:()=>ir});var Pe=class{static{i(this,"Uint8ArrayToPacket")}transform(e,t){let r=je(e);if(!r){t.error("Invalid Packet Encoding");return}t.enqueue(r)}};function ir(){return new TransformStream(new Pe)}i(ir,"transform");var ze={};y(ze,{Unwrap:()=>_e,transform:()=>ar});var _e=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 _e)}i(ar,"transform");var Xe={};y(Xe,{LENGTH_BYTES:()=>or,UnwrapLengthPrefix:()=>Le,transform:()=>ur});var or=4,Le=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 ur(s){return new TransformStream(new Le(s))}i(ur,"transform");var Je=class extends O{static{i(this,"Socket")}ANNOUNCE_PERIOD=5e3;PEER_EXPIRATION=this.ANNOUNCE_PERIOD*5;peers=new Z;transport;writer;substreams=new Z;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<=Te)throw new Error(`Transport MAX_CHUNK_SIZE too small to fit overhead: ${e.MAX_CHUNK_SIZE} <= ${Te}`);if(this.streamKey=t?.keys?.danger?.streamKey,this.ecdh=t?.keys?.danger?.ecdh,t?.keys?.ecdsa?this.ecdsa=t.keys.ecdsa:this.ecdsa=await ee(t?.keys?.danger?.exportable??!1),t?.keys?.trusted)for(let r of t.keys.trusted)this.trusted.push(await F(r));this.exportedPub=await F(this.ecdsa.publicKey),this.transport=e,this.transport.readable=e.readable.pipeThrough(fe.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(ue.transform(this.ecdsa.privateKey)).pipeThrough(ce.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:L(),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:L(),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:L(),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=L();while(n.has(t));let a=new oe(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 re.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 le={};y(le,{ws:()=>Qe});var Qe={};y(Qe,{WebSocketTransport:()=>Ie,create:()=>cr});var Ie=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 cr(s,e){return new Ie(s,e)}i(cr,"create");var Tt={};y(Tt,{ErrorMessage:()=>de,Message:()=>P,RequestMessage:()=>he,ResponseMessage:()=>B,Result:()=>R,URPC:()=>U,URPCError:()=>b,decode:()=>dr,default:()=>pr});var et={};y(et,{URPC:()=>U,URPCError:()=>b});function Et(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(Et,"concat");async function St(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 Et(t)}i(St,"compress");async function kt(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 Et(t)}i(kt,"decompress");function G(s){let e=new TextDecoder().decode(s);return e==="undefined"&&(e="null"),e&&JSON.parse(e)}i(G,"decode");function Oe(s){return new TextEncoder().encode(JSON.stringify(s))}i(Oe,"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 St(Oe(e))}static async decode(e){let t=G(await kt(e));return new s(t.method,t.params,t.error,t.result?t.result:void 0)}},he=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}},B=class extends P{static{i(this,"ResponseMessage")}constructor(e){super(void 0,void 0,void 0,new TextDecoder().decode(e))}},de=class extends P{static{i(this,"ErrorMessage")}error;constructor(e){super(void 0,void 0,e,void 0),this.error=e}};var R=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(N.unwrap.transform()))}async value({close:e=!1}={}){return e&&await this.close(),G(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)}},U=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(N.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 B(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 de({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 he(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 R(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 Oe(e)}static decode(e){return G(e)}};var Re=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 fr(s,e){let t=new Re(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 Re(s.from,s.to,s.flow);return await r.init(e),r.listen(),await r.consume(s),{client:t,worker:r}}i(fr,"streams");function lr(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(lr,"pipe");async function hr(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&$.Flag.SYN&&!(a.flags&$.Flag.ACK)){t=a;break}}}finally{r.releaseLock()}return t}i(hr,"syn");async function dr(s,e,t){let r=await hr(s,t);if(!r)return;let{client:n,worker:a}=await fr(r,e),o=new U({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([lr(s,n,a,t),new Promise((f,d)=>{o.invoke=(h,g,D)=>{let Qt=JSON.stringify({method:h,params:g}),ft=new R(a,new TextEncoder().encode(Qt));return ft._readable=D,f(ft),Promise.resolve(new ReadableStream({async start(lt){lt.enqueue(await new B(new Uint8Array(0)).encode()),lt.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 R(n,new TextEncoder().encode(d))})]);return{request:u,response:c}}i(dr,"decode");var pr=et;var zt={};y(zt,{AuthStatus:()=>jt,Page:()=>z,types:()=>at});function mr(s){return function(...e){var t=e.pop();return s.call(this,e,t)}}i(mr,"initialParams");var yr=typeof queueMicrotask=="function"&&queueMicrotask,Lt=typeof setImmediate=="function"&&setImmediate,It=typeof process=="object"&&typeof process.nextTick=="function";function Ot(s){setTimeout(s,0)}i(Ot,"fallback");function Rt(s){return(e,...t)=>s(()=>e(...t))}i(Rt,"wrap");var pe;yr?pe=queueMicrotask:Lt?pe=setImmediate:It?pe=process.nextTick:pe=Ot;var Ut=Rt(pe);function wr(s){return rt(s)?function(...e){let t=e.pop(),r=s.apply(this,e);return xt(r,t)}:mr(function(e,t){var r;try{r=s.apply(this,e)}catch(n){return t(n)}if(r&&typeof r.then=="function")return xt(r,t);t(null,r)})}i(wr,"asyncify");function xt(s,e){return s.then(t=>{Ct(e,null,t)},t=>{Ct(e,t&&(t instanceof Error||t.message)?t:new Error(t))})}i(xt,"handlePromise");function Ct(s,e,t){try{s(e,t)}catch(r){Ut(n=>{throw n},r)}}i(Ct,"invokeCallback");function rt(s){return s[Symbol.toStringTag]==="AsyncFunction"}i(rt,"isAsync");function gr(s){return s[Symbol.toStringTag]==="AsyncGenerator"}i(gr,"isAsyncGenerator");function Ar(s){return typeof s[Symbol.asyncIterator]=="function"}i(Ar,"isAsyncIterable");function m(s){if(typeof s!="function")throw new Error("expected a function");return rt(s)?wr(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 Kt(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(Kt,"applyEach$1");function st(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(st,"_asyncMap");function Ke(s){return s&&typeof s.length=="number"&&s.length>=0&&s.length%1===0}i(Ke,"isArrayLike");var De={};function V(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(V,"once");function vr(s){return s[Symbol.iterator]&&s[Symbol.iterator]()}i(vr,"getIterator");function br(s){var e=-1,t=s.length;return i(function(){return++e<t?{value:s[e],key:e}:null},"next")}i(br,"createArrayIterator");function Er(s){var e=-1;return i(function(){var r=s.next();return r.done?null:(e++,{value:r.value,key:e})},"next")}i(Er,"createES2015Iterator");function Sr(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(Sr,"createObjectIterator");function kr(s){if(Ke(s))return br(s);var e=vr(s);return e?Er(e):Sr(s)}i(kr,"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 Pt(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:D})=>{if(!(a||n)){if(o=!1,D){n=!0,u<=0&&r(null);return}u++,t(g,c,d),c++,f()}}).catch(h))}i(f,"replenish");function d(g,D){if(u-=1,!a){if(g)return h(g);if(g===!1){n=!0,a=!0;return}if(D===De||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(Pt,"asyncEachOfLimit");var x=i(s=>(e,t,r)=>{if(r=V(r),s<=0)throw new RangeError("concurrency limit cannot be less than 1");if(!e)return r(null);if(gr(e))return Pt(e,s,t,r);if(Ar(e))return Pt(e[Symbol.asyncIterator](),s,t,r);var n=kr(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===De||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 Tr(s,e,t,r){return x(e)(s,m(t),r)}i(Tr,"eachOfLimit");var Dt=p(Tr,4);function xr(s,e,t){t=V(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===De)&&t(null))}for(i(u,"iteratorCallback");r<a;r++)e(s[r],r,j(u))}i(xr,"eachOfArrayLike");function Cr(s,e,t){return Dt(s,1/0,e,t)}i(Cr,"eachOfGeneric");function Pr(s,e,t){var r=Ke(s)?xr:Cr;return r(s,m(e),t)}i(Pr,"eachOf");var M=p(Pr,3);function _r(s,e,t){return st(M,s,e,t)}i(_r,"map");var Nt=p(_r,3),Mn=Kt(Nt);function Lr(s,e,t){return Dt(s,1,e,t)}i(Lr,"eachOfSeries");var Y=p(Lr,3);function Ir(s,e,t){return st(Y,s,e,t)}i(Ir,"mapSeries");var Or=p(Ir,3),qn=Kt(Or),Bt=Symbol("promiseCallback");function _t(){let s,e;function t(r,...n){if(r)return e(r);s(n.length>1?n:n[0])}return i(t,"callback"),t[Bt]=new Promise((r,n)=>{s=r,e=n}),t}i(_t,"promiseCallback");function Rr(s,e,t,r){r=V(r);var n=m(t);return Y(s,(a,o,u)=>{n(e,a,(c,f)=>{e=f,u(c)})},a=>r(a,e))}i(Rr,"reduce");var Fn=p(Rr,4);function Ur(s,e,t,r){return st(x(e),s,t,r)}i(Ur,"mapLimit");var Mt=p(Ur,4);function Kr(s,e,t,r){var n=m(t);return Mt(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(Kr,"concatLimit");var qt=p(Kr,4);function Dr(s,e,t){return qt(s,1/0,e,t)}i(Dr,"concat");var Wn=p(Dr,3);function Nr(s,e,t){return qt(s,1,e,t)}i(Nr,"concatSeries");var Hn=p(Nr,3);function _(s,e){return(t,r,n,a)=>{var o=!1,u;let c=m(n);t(r,(f,d,h)=>{c(f,(g,D)=>{if(g||g===!1)return h(g);if(s(D)&&!u)return o=!0,u=e(!0,f),h(null,De);h()})},f=>{if(f)return a(f);a(null,o?u:e(!1))})}}i(_,"_createTester");function Br(s,e,t){return _(r=>r,(r,n)=>n)(M,s,e,t)}i(Br,"detect");var $n=p(Br,3);function Mr(s,e,t,r){return _(n=>n,(n,a)=>a)(x(e),s,t,r)}i(Mr,"detectLimit");var Gn=p(Mr,4);function qr(s,e,t){return _(r=>r,(r,n)=>n)(x(1),s,e,t)}i(qr,"detectSeries");var Vn=p(qr,3);function Ft(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(Ft,"consoleFunc");var jn=Ft("dir");function Fr(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(Fr,"doWhilst");var Yn=p(Fr,3);function Wt(s){return(e,t,r)=>s(e,r)}i(Wt,"_withoutIndex");function Wr(s,e,t){return M(s,Wt(m(e)),t)}i(Wr,"eachLimit$2");var zn=p(Wr,3);function Hr(s,e,t,r){return x(e)(s,Wt(m(t)),r)}i(Hr,"eachLimit");var $r=p(Hr,4);function Gr(s,e,t){return $r(s,1,e,t)}i(Gr,"eachSeries");var Vr=p(Gr,3);function jr(s){return rt(s)?s:function(...e){var t=e.pop(),r=!0;e.push((...n)=>{r?Ut(()=>t(...n)):t(...n)}),s.apply(this,e),r=!1}}i(jr,"ensureAsync");function Yr(s,e,t){return _(r=>!r,r=>!r)(M,s,e,t)}i(Yr,"every");var Xn=p(Yr,3);function zr(s,e,t,r){return _(n=>!n,n=>!n)(x(e),s,t,r)}i(zr,"everyLimit");var Jn=p(zr,4);function Xr(s,e,t){return _(r=>!r,r=>!r)(Y,s,e,t)}i(Xr,"everySeries");var Qn=p(Xr,3);function Jr(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(Jr,"filterArray");function Qr(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(Qr,"filterGeneric");function Ne(s,e,t,r){var n=Ke(e)?Jr:Qr;return n(s,e,m(t),r)}i(Ne,"_filter");function Zr(s,e,t){return Ne(M,s,e,t)}i(Zr,"filter");var Zn=p(Zr,3);function es(s,e,t,r){return Ne(x(e),s,t,r)}i(es,"filterLimit");var ei=p(es,4);function ts(s,e,t){return Ne(Y,s,e,t)}i(ts,"filterSeries");var ti=p(ts,3);function rs(s,e){var t=j(e),r=m(jr(s));function n(a){if(a)return t(a);a!==!1&&r(n)}return i(n,"next"),n()}i(rs,"forever");var ri=p(rs,2);function ss(s,e,t,r){var n=m(t);return Mt(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(ss,"groupByLimit");var si=p(ss,4);var ni=Ft("log");function ns(s,e,t,r){r=V(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(ns,"mapValuesLimit");var ii=p(ns,4);var Ue;It?Ue=process.nextTick:Lt?Ue=setImmediate:Ue=Ot;var ai=Rt(Ue),oi=p((s,e,t)=>{var r=Ke(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 is(s,e){if(e=V(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(is,"race");var ui=p(is,2);function nt(s,e,t,r){let n=m(t);return Ne(s,e,(a,o)=>{n(a,(u,c)=>{o(u,!c)})},r)}i(nt,"reject$2");function as(s,e,t){return nt(M,s,e,t)}i(as,"reject");var ci=p(as,3);function os(s,e,t,r){return nt(x(e),s,t,r)}i(os,"rejectLimit");var fi=p(os,4);function us(s,e,t){return nt(Y,s,e,t)}i(us,"rejectSeries");var li=p(us,3);function Ht(s){return function(){return s}}i(Ht,"constant");var tt=5,$t=0;function Gt(s,e,t){var r={times:tt,intervalFunc:Ht($t)};if(arguments.length<3&&typeof s=="function"?(t=e||_t(),e=s):(cs(r,s),t=t||_t()),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[Bt]}i(Gt,"retry");function cs(s,e){if(typeof e=="object")s.times=+e.times||tt,s.intervalFunc=typeof e.interval=="function"?e.interval:Ht(+e.interval||$t),s.errorFilter=e.errorFilter;else if(typeof e=="number"||typeof e=="string")s.times=+e||tt;else throw new Error("Invalid arguments for async.retry")}i(cs,"parseTimes");function fs(s,e,t){return _(Boolean,r=>r)(M,s,e,t)}i(fs,"some");var hi=p(fs,3);function ls(s,e,t,r){return _(Boolean,n=>n)(x(e),s,t,r)}i(ls,"someLimit");var di=p(ls,4);function hs(s,e,t){return _(Boolean,r=>r)(Y,s,e,t)}i(hs,"someSeries");var pi=p(hs,3);function ds(s,e,t){var r=m(e);return Nt(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(ds,"sortBy");var mi=p(ds,3);function ps(s,e){var t=null,r;return Vr(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(ps,"tryEach");var yi=p(ps);function ms(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(ms,"whilst");var wi=p(ms,3);function ys(s,e){if(e=V(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(ys,"waterfall");var gi=p(ys);var it={times:600,interval:100},ws={simulateFramework:!1},gs={simulateFramework:!1,simulateTyping:!0,triggerEvents:!0},Vt={timeout:9e4},jt=(t=>(t.ABORTED="aborted",t.AUTHENTICATED="authenticated",t))(jt||{}),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:()=>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:
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=ws){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=gs){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=it);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=it){await(await this.client.urpc.call(this.worker,"page.waitForSelector",[this.handle,e,this.resolveWaitForOptions(t)])).close()}async waitForFunction(e,t=it,...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=Vt){return await this.goto(e),await this.waitForAuthentication(t,r)}async waitForAuthentication(e,t=Vt){let r=new AbortController;await this.once("closed",()=>{r.abort()});let n=t.timeout||6e4;return await Gt({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 at={};y(at,{AuthStatus:()=>Yt});var Yt=(t=>(t.ABORTED="aborted",t.AUTHENTICATED="authenticated",t))(Yt||{});var Xt={};y(Xt,{Browser:()=>X});var X=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 ot={};y(ot,{Client:()=>Be,ClientWorker:()=>K,connect:()=>Me});var K=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 X(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 X(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 Be=class extends O{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 U(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 K(this,e.address);this.emit("worker-connected",t)},this.peerGoneListener=e=>{if(e.address.type()!==A.Type.WORKER)return;let t=new K(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 K(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 K(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 As(s,e){let t=new Be(s,e);return await t.init(),t}i(As,"create");async function Me(s,e){let t=new URL(s),n=[`auth-${t.pathname.split("/").pop()??""}`];e?.credential&&n.push(`credential-${e.credential}`);let a=le.ws.create(()=>new WebSocket(`${t.origin}/session`,n));await a.connect();let o=await As(a,e);return o.urpc.socket.discover(A.Address.SERVICE_BROADCAST),o}i(Me,"connect");var Jt={};y(Jt,{default:()=>ct});var ut={};y(ut,{session:()=>q});var q={};y(q,{create:()=>vs,details:()=>bs,get:()=>Es});var J=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}};async function vs(s,e={}){let t=e.host??"https://api.uplink.build",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 fetch(`${t}/sessions`,{method:"POST",headers:{authorization:`ApiKey ${s}`,"content-type":"application/json"},body:JSON.stringify(r),signal:e.signal}),o=await a.json();if(!a.ok)throw new J(a.status,o);return o.credential=n,o}i(vs,"create");async function bs(s,e,t){let r=t?.host??"https://api.uplink.build",n=await fetch(`${r}/sessions/details/${e}`,{method:"GET",headers:{authorization:`ApiKey ${s}`,"content-type":"application/json"}}),a=await n.json();if(!n.ok)throw new J(n.status,a);return a}i(bs,"details");async function Es(s,e,t){let r=t?.host??"https://api.uplink.build",n=new URLSearchParams;t?.include?.ecdh&&n.set("includeEcdh","true"),t?.include?.ecdsa&&n.set("includeEcdsa","true");let a=n.toString(),o=`${r}/sessions/${e}${a?`?${a}`:""}`,u=await fetch(o,{method:"GET",headers:{authorization:`ApiKey ${s}`,"content-type":"application/json"}}),c=await u.json();if(!u.ok)throw new J(u.status,c);return c}i(Es,"get");var ct={api:ut,client:{connect:Me,fromSession:i(async(s,e)=>{let t,r,n=s.keys;if(n){if(n.ecdh){let a=await H(Uint8Array.from(atob(n.ecdh.public),u=>u.charCodeAt(0)),!0);r={privateKey:await ge(Uint8Array.from(atob(n.ecdh.private),u=>u.charCodeAt(0)),!1),publicKey:a}}if(n.ecdsa){let a=await W(Uint8Array.from(atob(n.ecdsa.public),u=>u.charCodeAt(0)),!0);t={privateKey:await we(Uint8Array.from(atob(n.ecdsa.private),u=>u.charCodeAt(0)),!1),publicKey:a}}}return Me(s.sessionUrl,{credential:s.credential,keys:{ecdsa:t,ecdh:r},...e})},"fromSession")},crypto:{generateECDHKeyPair:te,generateECDSAKeyPair:ee,importPKCS8ECDHPrivateKey:ge,importPKCS8ECDSAPrivateKey:we,importRawECDHPublicKey:H,importRawECDSAPublicKey:W},session:q.create,sessionDetails:q.details,getSession:q.get};var Gi=ct;export{Xt as browser,ot as client,Gi as default,zt as page,Ze as ump,Jt as uplink,Tt 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:()=>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};

@@ -0,2 +1,4 @@

export * as auth from './auth.ts';
export * as session from './session.ts';
export { DEFAULT_HOST, request } from './request.ts';
//# sourceMappingURL=index.d.ts.map

@@ -0,1 +1,2 @@

import { type Auth } from './auth.ts';
export interface Session {

@@ -67,10 +68,10 @@ sessionId: string;

}
export declare function create(apiKey: string, options?: SessionOptions & Partial<{
export declare function create(auth: Auth, options?: SessionOptions & Partial<{
host: string;
signal: AbortSignal;
}>): Promise<Session>;
export declare function details(apiKey: string, sessionId: string, options?: {
export declare function details(auth: Auth, sessionId: string, options?: {
host?: string;
}): Promise<SessionDetails>;
export declare function get(apiKey: string, sessionId: string, options?: {
export declare function get(auth: Auth, sessionId: string, options?: {
host?: string;

@@ -77,0 +78,0 @@ include?: {

@@ -13,3 +13,4 @@ export * as ump from '../../ump/src/index.ts';

export type { Session } from './api/session.ts';
export type { Auth, ClientCredentials, Scope, Token } from './api/auth.ts';
export default uplink;
//# sourceMappingURL=index.d.ts.map

@@ -18,2 +18,3 @@ import * as api from './api/index.ts';

};
token: typeof api.auth.token;
session: typeof api.session.create;

@@ -20,0 +21,0 @@ sessionDetails: typeof api.session.details;

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

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