agent-device 0.21.3 → 0.21.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.3.apk → agent-device-android-ime-helper-0.21.4.apk} +0 -0
- package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.4.apk.sha256 +1 -0
- package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.3.manifest.json → agent-device-android-ime-helper-0.21.4.manifest.json} +4 -4
- package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.21.3.apk → agent-device-android-snapshot-helper-0.21.4.apk} +0 -0
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.4.apk.sha256 +1 -0
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.4.manifest.json +16 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunner/AgentDeviceRunnerApp.m +39 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSystemSurfaceHostPolicy.swift +9 -1
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+AXSnapshotFallback.swift +2 -1
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Alert.swift +10 -1
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandExecution.swift +26 -124
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandJournal.swift +46 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Lifecycle.swift +36 -4
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+MainThreadWork.swift +229 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Models.swift +15 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Snapshot.swift +4 -40
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotCapturePlan.swift +6 -40
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Transport.swift +30 -9
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests.swift +22 -6
- package/dist/src/adapter.js +1 -1
- package/dist/src/adb-executor.js +2 -2
- package/dist/src/adb-failure.js +1 -1
- package/dist/src/agent-browser-process-record.js +1 -1
- package/dist/src/agent-device-client.js +2 -2
- package/dist/src/api.js +3 -11
- package/dist/src/app-launch.js +1 -1
- package/dist/src/app-lifecycle.js +1 -1
- package/dist/src/app-log-reconnect.js +1 -1
- package/dist/src/archive.js +2 -2
- package/dist/src/cli-help.js +2 -2
- package/dist/src/cli.js +4 -4
- package/dist/src/client-metro-companion.js +1 -1
- package/dist/src/client-metro.js +1 -1
- package/dist/src/client-types.d.ts +69 -4
- package/dist/src/code-signature-cache.js +1 -1
- package/dist/src/command-tools.js +2 -2
- package/dist/src/command.js +1 -1
- package/dist/src/connection-runtime.js +1 -1
- package/dist/src/contracts.js +1 -1
- package/dist/src/daemon-client-lifecycle.js +1 -1
- package/dist/src/daemon-shutdown-report.js +1 -1
- package/dist/src/device-claim-rule.js +1 -1
- package/dist/src/device-input-state.d.ts +10 -8
- package/dist/src/device-inventory-context.js +1 -1
- package/dist/src/device-session.js +1 -1
- package/dist/src/diagnostics.js +1 -1
- package/dist/src/error.js +2 -2
- package/dist/src/exec.js +1 -1
- package/dist/src/file.js +1 -1
- package/dist/src/find.js +1 -1
- package/dist/src/gesture-runtime.js +1 -1
- package/dist/src/helper.js +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/install-source-network-transport.js +1 -1
- package/dist/src/interaction2.js +1 -1
- package/dist/src/interactor.js +4 -4
- package/dist/src/internal/bin.js +1 -1
- package/dist/src/internal/daemon.js +2 -2
- package/dist/src/internal/png-worker.js +1 -1
- package/dist/src/ios-client.js +121 -7
- package/dist/src/ios-snapshot-adapter.js +1 -1
- package/dist/src/ios-system-surface.js +1 -1
- package/dist/src/limrun-delta-sync-omitted.js +1 -0
- package/dist/src/limrun.d.ts +0 -1598
- package/dist/src/location-coordinates.js +1 -1
- package/dist/src/mechanics.js +16 -16
- package/dist/src/output-common.js +2 -0
- package/dist/src/owner-identity.js +1 -1
- package/dist/src/perf-runtime-operation-builder.js +1 -1
- package/dist/src/perf-runtime-plan.js +1 -1
- package/dist/src/platform-runtime-android-adb-host.js +1 -1
- package/dist/src/platform-runtime-app-log-android-transport.js +1 -1
- package/dist/src/platform-runtime-app-log-process.js +1 -1
- package/dist/src/platform-runtime-host.js +1 -1
- package/dist/src/platform-runtime-operation-host.js +2 -2
- package/dist/src/platform-runtime-screen-recording-android-host.js +1 -1
- package/dist/src/platform-runtime-screen-recording-finalizer-host.js +1 -1
- package/dist/src/platform-runtime-screen-recording-output-host.js +1 -1
- package/dist/src/platform-runtime-screen-recording-process-host.js +1 -1
- package/dist/src/process.js +1 -1
- package/dist/src/proxy.js +1 -1
- package/dist/src/quality-warnings.js +1 -1
- package/dist/src/react-native.js +1 -1
- package/dist/src/record-runtime.js +1 -1
- package/dist/src/recording-stop-observation.js +1 -0
- package/dist/src/registry.js +35 -36
- package/dist/src/replay-divergence.js +1 -1
- package/dist/src/reporting.js +11 -9
- package/dist/src/result-serialization.js +1 -1
- package/dist/src/runner-cache-metadata.js +1 -1
- package/dist/src/runner-client.js +1 -1
- package/dist/src/runner-disposal.js +1 -1
- package/dist/src/runner-operations-facade.js +1 -1
- package/dist/src/runner.js +1 -1
- package/dist/src/runtime.js +3 -3
- package/dist/src/runtime10.js +1 -1
- package/dist/src/runtime2.js +4 -4
- package/dist/src/runtime3.js +1 -1
- package/dist/src/runtime4.js +4 -4
- package/dist/src/runtime5.js +1 -1
- package/dist/src/runtime6.js +1 -1
- package/dist/src/runtime9.js +1 -1
- package/dist/src/screen-recording-completion.js +1 -1
- package/dist/src/screen-recording-resource-recovery.js +1 -1
- package/dist/src/screenshot-result.js +1 -1
- package/dist/src/sdk-contracts.js +2 -2
- package/dist/src/sdk-selectors.d.ts +36 -24
- package/dist/src/selector-runtime.js +1 -1
- package/dist/src/session-observation.js +1 -1
- package/dist/src/session-snapshot.js +1 -1
- package/dist/src/session-store.js +2 -2
- package/dist/src/session2.js +5 -5
- package/dist/src/snapshot-runtime.js +1 -1
- package/dist/src/snapshot.js +1 -1
- package/dist/src/snapshot4.js +1 -1
- package/dist/src/stop-sequence.js +1 -0
- package/dist/src/success-text.js +1 -1
- package/dist/src/text-entry-focus.js +1 -0
- package/dist/src/tool-provider.js +1 -1
- package/dist/src/tool-provider2.js +1 -1
- package/dist/src/tool-provider3.js +1 -1
- package/dist/src/type-text-runtime.js +1 -1
- package/dist/src/video.js +2 -2
- package/dist/src/yauzl.js +1 -0
- package/package.json +2 -2
- package/server.json +2 -2
- package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.3.apk.sha256 +0 -1
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.3.apk.sha256 +0 -1
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.3.manifest.json +0 -17
- package/dist/src/audio-probe-support.js +0 -1
- package/dist/src/screen-recording-live-handle.js +0 -1
package/dist/src/ios-client.js
CHANGED
|
@@ -1,16 +1,130 @@
|
|
|
1
|
-
import{a as e,i as t,t as n}from"./rolldown-runtime.js";import{t as r}from"./undici.js";import{exec as i}from"node:child_process";import{EventEmitter as a}from"events";import o from"fs";import*as s from"zlib";import{Readable as c}from"stream";import*as l from"net";import u from"os";import d from"path";import*as f from"crypto";import p from"crypto";import{spawn as m}from"child_process";import{pipeline as h}from"stream/promises";var g=n(((e,t)=>{var n=1e3,r=n*60,i=r*60,a=i*24,o=a*7,s=a*365.25;t.exports=function(e,t){t||={};var n=typeof e;if(n===`string`&&e.length>0)return c(e);if(n===`number`&&isFinite(e))return t.long?u(e):l(e);throw Error(`val is not a non-empty string or a valid number. val=`+JSON.stringify(e))};function c(e){if(e=String(e),!(e.length>100)){var t=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(t){var c=parseFloat(t[1]);switch((t[2]||`ms`).toLowerCase()){case`years`:case`year`:case`yrs`:case`yr`:case`y`:return c*s;case`weeks`:case`week`:case`w`:return c*o;case`days`:case`day`:case`d`:return c*a;case`hours`:case`hour`:case`hrs`:case`hr`:case`h`:return c*i;case`minutes`:case`minute`:case`mins`:case`min`:case`m`:return c*r;case`seconds`:case`second`:case`secs`:case`sec`:case`s`:return c*n;case`milliseconds`:case`millisecond`:case`msecs`:case`msec`:case`ms`:return c;default:return}}}}function l(e){var t=Math.abs(e);return t>=a?Math.round(e/a)+`d`:t>=i?Math.round(e/i)+`h`:t>=r?Math.round(e/r)+`m`:t>=n?Math.round(e/n)+`s`:e+`ms`}function u(e){var t=Math.abs(e);return t>=a?d(e,t,a,`day`):t>=i?d(e,t,i,`hour`):t>=r?d(e,t,r,`minute`):t>=n?d(e,t,n,`second`):e+` ms`}function d(e,t,n,r){var i=t>=n*1.5;return Math.round(e/n)+` `+r+(i?`s`:``)}})),_=n(((e,t)=>{function n(e){n.debug=n,n.default=n,n.coerce=c,n.disable=o,n.enable=i,n.enabled=s,n.humanize=g(),n.destroy=l,Object.keys(e).forEach(t=>{n[t]=e[t]}),n.names=[],n.skips=[],n.formatters={};function t(e){let t=0;for(let n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n),t|=0;return n.colors[Math.abs(t)%n.colors.length]}n.selectColor=t;function n(e){let t,i=null,a,o;function s(...e){if(!s.enabled)return;let r=s,i=Number(new Date);r.diff=i-(t||i),r.prev=t,r.curr=i,t=i,e[0]=n.coerce(e[0]),typeof e[0]!=`string`&&e.unshift(`%O`);let a=0;e[0]=e[0].replace(/%([a-zA-Z%])/g,(t,i)=>{if(t===`%%`)return`%`;a++;let o=n.formatters[i];if(typeof o==`function`){let n=e[a];t=o.call(r,n),e.splice(a,1),a--}return t}),n.formatArgs.call(r,e),(r.log||n.log).apply(r,e)}return s.namespace=e,s.useColors=n.useColors(),s.color=n.selectColor(e),s.extend=r,s.destroy=n.destroy,Object.defineProperty(s,"enabled",{enumerable:!0,configurable:!1,get:()=>i===null?(a!==n.namespaces&&(a=n.namespaces,o=n.enabled(e)),o):i,set:e=>{i=e}}),typeof n.init==`function`&&n.init(s),s}function r(e,t){let r=n(this.namespace+(t===void 0?`:`:t)+e);return r.log=this.log,r}function i(e){n.save(e),n.namespaces=e,n.names=[],n.skips=[];let t=(typeof e==`string`?e:``).trim().replace(/\s+/g,`,`).split(`,`).filter(Boolean);for(let e of t)e[0]===`-`?n.skips.push(e.slice(1)):n.names.push(e)}function a(e,t){let n=0,r=0,i=-1,a=0;for(;n<e.length;)if(r<t.length&&(t[r]===e[n]||t[r]===`*`))t[r]===`*`?(i=r,a=n,r++):(n++,r++);else if(i!==-1)r=i+1,a++,n=a;else return!1;for(;r<t.length&&t[r]===`*`;)r++;return r===t.length}function o(){let e=[...n.names,...n.skips.map(e=>`-`+e)].join(`,`);return n.enable(``),e}function s(e){for(let t of n.skips)if(a(e,t))return!1;for(let t of n.names)if(a(e,t))return!0;return!1}function c(e){return e instanceof Error?e.stack||e.message:e}function l(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return n.enable(n.load()),n}t.exports=n})),v=n(((e,t)=>{e.formatArgs=r,e.save=i,e.load=a,e.useColors=n,e.storage=o(),e.destroy=(()=>{let e=!1;return()=>{e||(e=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),e.colors=`#0000CC.#0000FF.#0033CC.#0033FF.#0066CC.#0066FF.#0099CC.#0099FF.#00CC00.#00CC33.#00CC66.#00CC99.#00CCCC.#00CCFF.#3300CC.#3300FF.#3333CC.#3333FF.#3366CC.#3366FF.#3399CC.#3399FF.#33CC00.#33CC33.#33CC66.#33CC99.#33CCCC.#33CCFF.#6600CC.#6600FF.#6633CC.#6633FF.#66CC00.#66CC33.#9900CC.#9900FF.#9933CC.#9933FF.#99CC00.#99CC33.#CC0000.#CC0033.#CC0066.#CC0099.#CC00CC.#CC00FF.#CC3300.#CC3333.#CC3366.#CC3399.#CC33CC.#CC33FF.#CC6600.#CC6633.#CC9900.#CC9933.#CCCC00.#CCCC33.#FF0000.#FF0033.#FF0066.#FF0099.#FF00CC.#FF00FF.#FF3300.#FF3333.#FF3366.#FF3399.#FF33CC.#FF33FF.#FF6600.#FF6633.#FF9900.#FF9933.#FFCC00.#FFCC33`.split(`.`);function n(){if(typeof window<`u`&&window.process&&(window.process.type===`renderer`||window.process.__nwjs))return!0;if(typeof navigator<`u`&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let e;return typeof document<`u`&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<`u`&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<`u`&&navigator.userAgent&&(e=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(e[1],10)>=31||typeof navigator<`u`&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function r(e){if(e[0]=(this.useColors?`%c`:``)+this.namespace+(this.useColors?` %c`:` `)+e[0]+(this.useColors?`%c `:` `)+`+`+t.exports.humanize(this.diff),!this.useColors)return;let n=`color: `+this.color;e.splice(1,0,n,`color: inherit`);let r=0,i=0;e[0].replace(/%[a-zA-Z%]/g,e=>{e!==`%%`&&(r++,e===`%c`&&(i=r))}),e.splice(i,0,n)}e.log=console.debug||console.log||(()=>{});function i(t){try{t?e.storage.setItem(`debug`,t):e.storage.removeItem(`debug`)}catch{}}function a(){let t;try{t=e.storage.getItem(`debug`)||e.storage.getItem(`DEBUG`)}catch{}return!t&&typeof process<`u`&&`env`in process&&(t=process.env.DEBUG),t}function o(){try{return localStorage}catch{}}t.exports=_()(e);let{formatters:s}=t.exports;s.j=function(e){try{return JSON.stringify(e)}catch(e){return`[UnexpectedJSONParseError]: `+e.message}}})),y=n(((e,t)=>{t.exports=(e,t=process.argv)=>{let n=e.startsWith(`-`)?``:e.length===1?`-`:`--`,r=t.indexOf(n+e),i=t.indexOf(`--`);return r!==-1&&(i===-1||r<i)}})),b=n(((e,n)=>{let r=t(`os`),i=t(`tty`),a=y(),{env:o}=process,s;a(`no-color`)||a(`no-colors`)||a(`color=false`)||a(`color=never`)?s=0:(a(`color`)||a(`colors`)||a(`color=true`)||a(`color=always`))&&(s=1),`FORCE_COLOR`in o&&(s=o.FORCE_COLOR===`true`?1:o.FORCE_COLOR===`false`?0:o.FORCE_COLOR.length===0?1:Math.min(parseInt(o.FORCE_COLOR,10),3));function c(e){return e!==0&&{level:e,hasBasic:!0,has256:e>=2,has16m:e>=3}}function l(e,t){if(s===0)return 0;if(a(`color=16m`)||a(`color=full`)||a(`color=truecolor`))return 3;if(a(`color=256`))return 2;if(e&&!t&&s===void 0)return 0;let n=s||0;if(o.TERM===`dumb`)return n;if(process.platform===`win32`){let e=r.release().split(`.`);return Number(e[0])>=10&&Number(e[2])>=10586?Number(e[2])>=14931?3:2:1}if(`CI`in o)return[`TRAVIS`,`CIRCLECI`,`APPVEYOR`,`GITLAB_CI`,`GITHUB_ACTIONS`,`BUILDKITE`].some(e=>e in o)||o.CI_NAME===`codeship`?1:n;if(`TEAMCITY_VERSION`in o)return+!!/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(o.TEAMCITY_VERSION);if(o.COLORTERM===`truecolor`)return 3;if(`TERM_PROGRAM`in o){let e=parseInt((o.TERM_PROGRAM_VERSION||``).split(`.`)[0],10);switch(o.TERM_PROGRAM){case`iTerm.app`:return e>=3?3:2;case`Apple_Terminal`:return 2}}return/-256(color)?$/i.test(o.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(o.TERM)||`COLORTERM`in o?1:n}function u(e){return c(l(e,e&&e.isTTY))}n.exports={supportsColor:u,stdout:c(l(!0,i.isatty(1))),stderr:c(l(!0,i.isatty(2)))}})),x=n(((e,n)=>{let r=t(`tty`),i=t(`util`);e.init=d,e.log=c,e.formatArgs=o,e.save=l,e.load=u,e.useColors=a,e.destroy=i.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."),e.colors=[6,2,3,4,5,1];try{let t=b();t&&(t.stderr||t).level>=2&&(e.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221])}catch{}e.inspectOpts=Object.keys(process.env).filter(e=>/^debug_/i.test(e)).reduce((e,t)=>{let n=t.substring(6).toLowerCase().replace(/_([a-z])/g,(e,t)=>t.toUpperCase()),r=process.env[t];return r=/^(yes|on|true|enabled)$/i.test(r)?!0:/^(no|off|false|disabled)$/i.test(r)?!1:r===`null`?null:Number(r),e[n]=r,e},{});function a(){return`colors`in e.inspectOpts?!!e.inspectOpts.colors:r.isatty(process.stderr.fd)}function o(e){let{namespace:t,useColors:r}=this;if(r){let r=this.color,i=`\x1B[3`+(r<8?r:`8;5;`+r),a=` ${i};1m${t} \u001B[0m`;e[0]=a+e[0].split(`
|
|
1
|
+
import{a as e,i as t,t as n}from"./rolldown-runtime.js";import{t as r}from"./yauzl.js";import{t as i}from"./undici.js";import{execFile as a}from"node:child_process";import{EventEmitter as o,once as s}from"events";import c from"fs";import*as l from"zlib";import{promisify as u}from"util";import{Readable as d,pipeline as f}from"stream";import*as p from"net";import m from"net";import h from"tls";import g from"os";import _ from"http";import v from"https";import{domainToASCII as y}from"url";import b from"path";import*as x from"crypto";import S from"crypto";import{execFile as C}from"child_process";import{pipeline as w}from"stream/promises";import T from"dns";var E=i();function D(e){return typeof e==`object`&&!!e&&(`name`in e&&e.name===`AbortError`||`message`in e&&String(e.message).includes(`FetchRequestCanceledException`))}const O=e=>{if(e instanceof Error)return e;if(typeof e==`object`&&e){try{if(Object.prototype.toString.call(e)===`[object Error]`){let t=Error(e.message,e.cause?{cause:e.cause}:{});return e.stack&&(t.stack=e.stack),e.cause&&!t.cause&&(t.cause=e.cause),e.name&&(t.name=e.name),t}}catch{}try{return Error(JSON.stringify(e))}catch{}}return Error(e)};var k=class extends Error{},A=class e extends k{constructor(t,n,r,i){super(`${e.makeMessage(t,n,r)}`),this.status=t,this.headers=i,this.error=n}static makeMessage(e,t,n){let r=t?.message?typeof t.message==`string`?t.message:JSON.stringify(t.message):t?JSON.stringify(t):n;return e&&r?`${e} ${r}`:e?`${e} status code (no body)`:r||`(no status code or body)`}static generate(t,n,r,i){if(!t||!i)return new M({message:r,cause:O(n)});let a=n;return t===400?new P(t,a,r,i):t===401?new F(t,a,r,i):t===403?new I(t,a,r,i):t===404?new L(t,a,r,i):t===409?new R(t,a,r,i):t===422?new z(t,a,r,i):t===429?new B(t,a,r,i):t>=500?new V(t,a,r,i):new e(t,a,r,i)}},j=class extends A{constructor({message:e}={}){super(void 0,void 0,e||`Request was aborted.`,void 0)}},M=class extends A{constructor({message:e,cause:t}){super(void 0,void 0,e||`Connection error.`,void 0),t&&(this.cause=t)}},N=class extends M{constructor({message:e}={}){super({message:e??`Request timed out.`})}},P=class extends A{},F=class extends A{},I=class extends A{},L=class extends A{},R=class extends A{},z=class extends A{},B=class extends A{},V=class extends A{},ee=e(r(),1);const te=e=>new Promise(t=>setTimeout(t,e));var H=n(((e,t)=>{var n=1e3,r=n*60,i=r*60,a=i*24,o=a*7,s=a*365.25;t.exports=function(e,t){t||={};var n=typeof e;if(n===`string`&&e.length>0)return c(e);if(n===`number`&&isFinite(e))return t.long?u(e):l(e);throw Error(`val is not a non-empty string or a valid number. val=`+JSON.stringify(e))};function c(e){if(e=String(e),!(e.length>100)){var t=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(t){var c=parseFloat(t[1]);switch((t[2]||`ms`).toLowerCase()){case`years`:case`year`:case`yrs`:case`yr`:case`y`:return c*s;case`weeks`:case`week`:case`w`:return c*o;case`days`:case`day`:case`d`:return c*a;case`hours`:case`hour`:case`hrs`:case`hr`:case`h`:return c*i;case`minutes`:case`minute`:case`mins`:case`min`:case`m`:return c*r;case`seconds`:case`second`:case`secs`:case`sec`:case`s`:return c*n;case`milliseconds`:case`millisecond`:case`msecs`:case`msec`:case`ms`:return c;default:return}}}}function l(e){var t=Math.abs(e);return t>=a?Math.round(e/a)+`d`:t>=i?Math.round(e/i)+`h`:t>=r?Math.round(e/r)+`m`:t>=n?Math.round(e/n)+`s`:e+`ms`}function u(e){var t=Math.abs(e);return t>=a?d(e,t,a,`day`):t>=i?d(e,t,i,`hour`):t>=r?d(e,t,r,`minute`):t>=n?d(e,t,n,`second`):e+` ms`}function d(e,t,n,r){var i=t>=n*1.5;return Math.round(e/n)+` `+r+(i?`s`:``)}})),ne=n(((e,t)=>{function n(e){n.debug=n,n.default=n,n.coerce=c,n.disable=o,n.enable=i,n.enabled=s,n.humanize=H(),n.destroy=l,Object.keys(e).forEach(t=>{n[t]=e[t]}),n.names=[],n.skips=[],n.formatters={};function t(e){let t=0;for(let n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n),t|=0;return n.colors[Math.abs(t)%n.colors.length]}n.selectColor=t;function n(e){let t,i=null,a,o;function s(...e){if(!s.enabled)return;let r=s,i=Number(new Date);r.diff=i-(t||i),r.prev=t,r.curr=i,t=i,e[0]=n.coerce(e[0]),typeof e[0]!=`string`&&e.unshift(`%O`);let a=0;e[0]=e[0].replace(/%([a-zA-Z%])/g,(t,i)=>{if(t===`%%`)return`%`;a++;let o=n.formatters[i];if(typeof o==`function`){let n=e[a];t=o.call(r,n),e.splice(a,1),a--}return t}),n.formatArgs.call(r,e),(r.log||n.log).apply(r,e)}return s.namespace=e,s.useColors=n.useColors(),s.color=n.selectColor(e),s.extend=r,s.destroy=n.destroy,Object.defineProperty(s,"enabled",{enumerable:!0,configurable:!1,get:()=>i===null?(a!==n.namespaces&&(a=n.namespaces,o=n.enabled(e)),o):i,set:e=>{i=e}}),typeof n.init==`function`&&n.init(s),s}function r(e,t){let r=n(this.namespace+(t===void 0?`:`:t)+e);return r.log=this.log,r}function i(e){n.save(e),n.namespaces=e,n.names=[],n.skips=[];let t=(typeof e==`string`?e:``).trim().replace(/\s+/g,`,`).split(`,`).filter(Boolean);for(let e of t)e[0]===`-`?n.skips.push(e.slice(1)):n.names.push(e)}function a(e,t){let n=0,r=0,i=-1,a=0;for(;n<e.length;)if(r<t.length&&(t[r]===e[n]||t[r]===`*`))t[r]===`*`?(i=r,a=n,r++):(n++,r++);else if(i!==-1)r=i+1,a++,n=a;else return!1;for(;r<t.length&&t[r]===`*`;)r++;return r===t.length}function o(){let e=[...n.names,...n.skips.map(e=>`-`+e)].join(`,`);return n.enable(``),e}function s(e){for(let t of n.skips)if(a(e,t))return!1;for(let t of n.names)if(a(e,t))return!0;return!1}function c(e){return e instanceof Error?e.stack||e.message:e}function l(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return n.enable(n.load()),n}t.exports=n})),re=n(((e,t)=>{e.formatArgs=r,e.save=i,e.load=a,e.useColors=n,e.storage=o(),e.destroy=(()=>{let e=!1;return()=>{e||(e=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),e.colors=`#0000CC.#0000FF.#0033CC.#0033FF.#0066CC.#0066FF.#0099CC.#0099FF.#00CC00.#00CC33.#00CC66.#00CC99.#00CCCC.#00CCFF.#3300CC.#3300FF.#3333CC.#3333FF.#3366CC.#3366FF.#3399CC.#3399FF.#33CC00.#33CC33.#33CC66.#33CC99.#33CCCC.#33CCFF.#6600CC.#6600FF.#6633CC.#6633FF.#66CC00.#66CC33.#9900CC.#9900FF.#9933CC.#9933FF.#99CC00.#99CC33.#CC0000.#CC0033.#CC0066.#CC0099.#CC00CC.#CC00FF.#CC3300.#CC3333.#CC3366.#CC3399.#CC33CC.#CC33FF.#CC6600.#CC6633.#CC9900.#CC9933.#CCCC00.#CCCC33.#FF0000.#FF0033.#FF0066.#FF0099.#FF00CC.#FF00FF.#FF3300.#FF3333.#FF3366.#FF3399.#FF33CC.#FF33FF.#FF6600.#FF6633.#FF9900.#FF9933.#FFCC00.#FFCC33`.split(`.`);function n(){if(typeof window<`u`&&window.process&&(window.process.type===`renderer`||window.process.__nwjs))return!0;if(typeof navigator<`u`&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let e;return typeof document<`u`&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<`u`&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<`u`&&navigator.userAgent&&(e=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(e[1],10)>=31||typeof navigator<`u`&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function r(e){if(e[0]=(this.useColors?`%c`:``)+this.namespace+(this.useColors?` %c`:` `)+e[0]+(this.useColors?`%c `:` `)+`+`+t.exports.humanize(this.diff),!this.useColors)return;let n=`color: `+this.color;e.splice(1,0,n,`color: inherit`);let r=0,i=0;e[0].replace(/%[a-zA-Z%]/g,e=>{e!==`%%`&&(r++,e===`%c`&&(i=r))}),e.splice(i,0,n)}e.log=console.debug||console.log||(()=>{});function i(t){try{t?e.storage.setItem(`debug`,t):e.storage.removeItem(`debug`)}catch{}}function a(){let t;try{t=e.storage.getItem(`debug`)||e.storage.getItem(`DEBUG`)}catch{}return!t&&typeof process<`u`&&`env`in process&&(t=process.env.DEBUG),t}function o(){try{return localStorage}catch{}}t.exports=ne()(e);let{formatters:s}=t.exports;s.j=function(e){try{return JSON.stringify(e)}catch(e){return`[UnexpectedJSONParseError]: `+e.message}}})),ie=n(((e,t)=>{t.exports=(e,t=process.argv)=>{let n=e.startsWith(`-`)?``:e.length===1?`-`:`--`,r=t.indexOf(n+e),i=t.indexOf(`--`);return r!==-1&&(i===-1||r<i)}})),ae=n(((e,n)=>{let r=t(`os`),i=t(`tty`),a=ie(),{env:o}=process,s;a(`no-color`)||a(`no-colors`)||a(`color=false`)||a(`color=never`)?s=0:(a(`color`)||a(`colors`)||a(`color=true`)||a(`color=always`))&&(s=1),`FORCE_COLOR`in o&&(s=o.FORCE_COLOR===`true`?1:o.FORCE_COLOR===`false`?0:o.FORCE_COLOR.length===0?1:Math.min(parseInt(o.FORCE_COLOR,10),3));function c(e){return e!==0&&{level:e,hasBasic:!0,has256:e>=2,has16m:e>=3}}function l(e,t){if(s===0)return 0;if(a(`color=16m`)||a(`color=full`)||a(`color=truecolor`))return 3;if(a(`color=256`))return 2;if(e&&!t&&s===void 0)return 0;let n=s||0;if(o.TERM===`dumb`)return n;if(process.platform===`win32`){let e=r.release().split(`.`);return Number(e[0])>=10&&Number(e[2])>=10586?Number(e[2])>=14931?3:2:1}if(`CI`in o)return[`TRAVIS`,`CIRCLECI`,`APPVEYOR`,`GITLAB_CI`,`GITHUB_ACTIONS`,`BUILDKITE`].some(e=>e in o)||o.CI_NAME===`codeship`?1:n;if(`TEAMCITY_VERSION`in o)return+!!/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(o.TEAMCITY_VERSION);if(o.COLORTERM===`truecolor`)return 3;if(`TERM_PROGRAM`in o){let e=parseInt((o.TERM_PROGRAM_VERSION||``).split(`.`)[0],10);switch(o.TERM_PROGRAM){case`iTerm.app`:return e>=3?3:2;case`Apple_Terminal`:return 2}}return/-256(color)?$/i.test(o.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(o.TERM)||`COLORTERM`in o?1:n}function u(e){return c(l(e,e&&e.isTTY))}n.exports={supportsColor:u,stdout:c(l(!0,i.isatty(1))),stderr:c(l(!0,i.isatty(2)))}})),oe=n(((e,n)=>{let r=t(`tty`),i=t(`util`);e.init=d,e.log=c,e.formatArgs=o,e.save=l,e.load=u,e.useColors=a,e.destroy=i.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."),e.colors=[6,2,3,4,5,1];try{let t=ae();t&&(t.stderr||t).level>=2&&(e.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221])}catch{}e.inspectOpts=Object.keys(process.env).filter(e=>/^debug_/i.test(e)).reduce((e,t)=>{let n=t.substring(6).toLowerCase().replace(/_([a-z])/g,(e,t)=>t.toUpperCase()),r=process.env[t];return r=/^(yes|on|true|enabled)$/i.test(r)?!0:/^(no|off|false|disabled)$/i.test(r)?!1:r===`null`?null:Number(r),e[n]=r,e},{});function a(){return`colors`in e.inspectOpts?!!e.inspectOpts.colors:r.isatty(process.stderr.fd)}function o(e){let{namespace:t,useColors:r}=this;if(r){let r=this.color,i=`\x1B[3`+(r<8?r:`8;5;`+r),a=` ${i};1m${t} \u001B[0m`;e[0]=a+e[0].split(`
|
|
2
2
|
`).join(`
|
|
3
3
|
`+a),e.push(i+`m+`+n.exports.humanize(this.diff)+`\x1B[0m`)}else e[0]=s()+t+` `+e[0]}function s(){return e.inspectOpts.hideDate?``:new Date().toISOString()+` `}function c(...t){return process.stderr.write(i.formatWithOptions(e.inspectOpts,...t)+`
|
|
4
|
-
`)}function l(e){e?process.env.DEBUG=e:delete process.env.DEBUG}function u(){return process.env.DEBUG}function d(t){t.inspectOpts={};let n=Object.keys(e.inspectOpts);for(let r=0;r<n.length;r++)t.inspectOpts[n[r]]=e.inspectOpts[n[r]]}n.exports=
|
|
5
|
-
`).map(e=>e.trim()).join(` `)},f.O=function(e){return this.inspectOpts.colors=this.useColors,i.inspect(e,this.inspectOpts)}})),
|
|
6
|
-
`).some(e=>e.indexOf(`(https.js:`)!==-1||e.indexOf(`node:https:`)!==-1)}incrementSockets(e){if(this.maxSockets===1/0&&this.maxTotalSockets===1/0)return null;this.sockets[e]||(this.sockets[e]=[]);let t=new o.Socket({writable:!1});return this.sockets[e].push(t),this.totalSocketCount++,t}decrementSockets(e,t){if(!this.sockets[e]||t===null)return;let n=this.sockets[e],r=n.indexOf(t);r!==-1&&(n.splice(r,1),this.totalSocketCount--,n.length===0&&delete this.sockets[e])}getName(e){return this.isSecureEndpoint(e)?c.Agent.prototype.getName.call(this,e):super.getName(e)}createSocket(e,t,n){let r={...t,secureEndpoint:this.isSecureEndpoint(t)},i=this.getName(r),a=this.incrementSockets(i);Promise.resolve().then(()=>this.connect(e,r)).then(o=>{if(this.decrementSockets(i,a),o instanceof s.Agent)try{return o.addRequest(e,r)}catch(e){return n(e)}this[l].currentSocket=o,super.createSocket(e,t,n)},e=>{this.decrementSockets(i,a),n(e)})}createConnection(){let e=this[l].currentSocket;if(this[l].currentSocket=void 0,!e)throw Error("No socket was returned in the `connect()` function");return e}get defaultPort(){return this[l].defaultPort??(this.protocol===`https:`?443:80)}set defaultPort(e){this[l]&&(this[l].defaultPort=e)}get protocol(){return this[l].protocol??(this.isSecureEndpoint()?`https:`:`http:`)}set protocol(e){this[l]&&(this[l].protocol=e)}}})),
|
|
4
|
+
`)}function l(e){e?process.env.DEBUG=e:delete process.env.DEBUG}function u(){return process.env.DEBUG}function d(t){t.inspectOpts={};let n=Object.keys(e.inspectOpts);for(let r=0;r<n.length;r++)t.inspectOpts[n[r]]=e.inspectOpts[n[r]]}n.exports=ne()(e);let{formatters:f}=n.exports;f.o=function(e){return this.inspectOpts.colors=this.useColors,i.inspect(e,this.inspectOpts).split(`
|
|
5
|
+
`).map(e=>e.trim()).join(` `)},f.O=function(e){return this.inspectOpts.colors=this.useColors,i.inspect(e,this.inspectOpts)}})),U=n(((e,t)=>{t.exports=typeof process>`u`||process.type===`renderer`||process.browser===!0||process.__nwjs?re():oe()})),se=n((e=>{var n=e&&e.__createBinding||(Object.create?(function(e,t,n,r){r===void 0&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);(!i||(`get`in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}):(function(e,t,n,r){r===void 0&&(r=n),e[r]=t[n]})),r=e&&e.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),i=e&&e.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var i in e)i!=="default"&&Object.prototype.hasOwnProperty.call(e,i)&&n(t,e,i);return r(t,e),t};Object.defineProperty(e,"__esModule",{value:!0}),e.req=e.json=e.toBuffer=void 0;let a=i(t(`http`)),o=i(t(`https`));async function s(e){let t=0,n=[];for await(let r of e)t+=r.length,n.push(r);return Buffer.concat(n,t)}e.toBuffer=s;async function c(e){let t=(await s(e)).toString(`utf8`);try{return JSON.parse(t)}catch(e){let n=e;throw n.message+=` (input: ${t})`,n}}e.json=c;function l(e,t={}){let n=((typeof e==`string`?e:e.href).startsWith(`https:`)?o:a).request(e,t),r=new Promise((e,t)=>{n.once(`response`,e).once(`error`,t).end()});return n.then=r.then.bind(r),n}e.req=l})),ce=n((e=>{var n=e&&e.__createBinding||(Object.create?(function(e,t,n,r){r===void 0&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);(!i||(`get`in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}):(function(e,t,n,r){r===void 0&&(r=n),e[r]=t[n]})),r=e&&e.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),i=e&&e.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var i in e)i!=="default"&&Object.prototype.hasOwnProperty.call(e,i)&&n(t,e,i);return r(t,e),t},a=e&&e.__exportStar||function(e,t){for(var r in e)r!=="default"&&!Object.prototype.hasOwnProperty.call(t,r)&&n(t,e,r)};Object.defineProperty(e,"__esModule",{value:!0}),e.Agent=void 0;let o=i(t(`net`)),s=i(t(`http`)),c=t(`https`);a(se(),e);let l=Symbol(`AgentBaseInternalState`);e.Agent=class extends s.Agent{constructor(e){super(e),this[l]={}}isSecureEndpoint(e){if(e){if(typeof e.secureEndpoint==`boolean`)return e.secureEndpoint;if(typeof e.protocol==`string`)return e.protocol===`https:`}let{stack:t}=Error();return typeof t==`string`&&t.split(`
|
|
6
|
+
`).some(e=>e.indexOf(`(https.js:`)!==-1||e.indexOf(`node:https:`)!==-1)}incrementSockets(e){if(this.maxSockets===1/0&&this.maxTotalSockets===1/0)return null;this.sockets[e]||(this.sockets[e]=[]);let t=new o.Socket({writable:!1});return this.sockets[e].push(t),this.totalSocketCount++,t}decrementSockets(e,t){if(!this.sockets[e]||t===null)return;let n=this.sockets[e],r=n.indexOf(t);r!==-1&&(n.splice(r,1),this.totalSocketCount--,n.length===0&&delete this.sockets[e])}getName(e){return this.isSecureEndpoint(e)?c.Agent.prototype.getName.call(this,e):super.getName(e)}createSocket(e,t,n){let r={...t,secureEndpoint:this.isSecureEndpoint(t)},i=this.getName(r),a=this.incrementSockets(i);Promise.resolve().then(()=>this.connect(e,r)).then(o=>{if(this.decrementSockets(i,a),o instanceof s.Agent)try{return o.addRequest(e,r)}catch(e){return n(e)}this[l].currentSocket=o,super.createSocket(e,t,n)},e=>{this.decrementSockets(i,a),n(e)})}createConnection(){let e=this[l].currentSocket;if(this[l].currentSocket=void 0,!e)throw Error("No socket was returned in the `connect()` function");return e}get defaultPort(){return this[l].defaultPort??(this.protocol===`https:`?443:80)}set defaultPort(e){this[l]&&(this[l].defaultPort=e)}get protocol(){return this[l].protocol??(this.isSecureEndpoint()?`https:`:`http:`)}set protocol(e){this[l]&&(this[l].protocol=e)}}})),W=n((e=>{var t=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,"__esModule",{value:!0}),e.parseProxyResponse=void 0;let n=(0,t(U()).default)(`https-proxy-agent:parse-proxy-response`);function r(e){return new Promise((t,r)=>{let i=0,a=[];function o(){let t=e.read();t?u(t):e.once(`readable`,o)}function s(){e.removeListener(`end`,c),e.removeListener(`error`,l),e.removeListener(`readable`,o)}function c(){s(),n(`onend`),r(Error(`Proxy connection ended before receiving CONNECT response`))}function l(e){s(),n(`onerror %o`,e),r(e)}function u(c){a.push(c),i+=c.length;let l=Buffer.concat(a,i),u=l.indexOf(`\r
|
|
7
7
|
\r
|
|
8
8
|
`);if(u===-1){n(`have not received end of HTTP headers yet...`),o();return}let d=l.slice(0,u).toString(`ascii`).split(`\r
|
|
9
|
-
`),f=d.shift();if(!f)return e.destroy(),r(Error(`No header received from proxy CONNECT response`));let p=f.split(` `),m=+p[1],h=p.slice(2).join(` `),g={};for(let t of d){if(!t)continue;let n=t.indexOf(`:`);if(n===-1)return e.destroy(),r(Error(`Invalid header from proxy CONNECT response: "${t}"`));let i=t.slice(0,n).toLowerCase(),a=t.slice(n+1).trimStart(),o=g[i];typeof o==`string`?g[i]=[o,a]:Array.isArray(o)?o.push(a):g[i]=a}n(`got proxy server response: %o %o`,f,g),s(),t({connect:{statusCode:m,statusText:h,headers:g},buffered:l})}e.on(`error`,l),e.on(`end`,c),o()})}e.parseProxyResponse=r})),E=n((e=>{var n=e&&e.__createBinding||(Object.create?(function(e,t,n,r){r===void 0&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);(!i||(`get`in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}):(function(e,t,n,r){r===void 0&&(r=n),e[r]=t[n]})),r=e&&e.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),i=e&&e.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var i in e)i!=="default"&&Object.prototype.hasOwnProperty.call(e,i)&&n(t,e,i);return r(t,e),t},a=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,"__esModule",{value:!0}),e.HttpsProxyAgent=void 0;let o=i(t(`net`)),s=i(t(`tls`)),c=a(t(`assert`)),l=a(S()),u=w(),d=t(`url`),f=T(),p=(0,l.default)(`https-proxy-agent`),m=e=>e.servername===void 0&&e.host&&!o.isIP(e.host)?{...e,servername:e.host}:e;var h=class extends u.Agent{constructor(e,t){super(t),this.options={path:void 0},this.proxy=typeof e==`string`?new d.URL(e):e,this.proxyHeaders=t?.headers??{},p(`Creating new HttpsProxyAgent instance: %o`,this.proxy.href);let n=(this.proxy.hostname||this.proxy.host).replace(/^\[|\]$/g,``),r=this.proxy.port?parseInt(this.proxy.port,10):this.proxy.protocol===`https:`?443:80;this.connectOpts={ALPNProtocols:[`http/1.1`],...t?_(t,`headers`):null,host:n,port:r}}async connect(e,t){let{proxy:n}=this;if(!t.host)throw TypeError(`No "host" provided`);let r;n.protocol===`https:`?(p("Creating `tls.Socket`: %o",this.connectOpts),r=s.connect(m(this.connectOpts))):(p("Creating `net.Socket`: %o",this.connectOpts),r=o.connect(this.connectOpts));let i=typeof this.proxyHeaders==`function`?this.proxyHeaders():{...this.proxyHeaders},a=o.isIPv6(t.host)?`[${t.host}]`:t.host,l=`CONNECT ${a}:${t.port} HTTP/1.1\r\n`;if(n.username||n.password){let e=`${decodeURIComponent(n.username)}:${decodeURIComponent(n.password)}`;i[`Proxy-Authorization`]=`Basic ${Buffer.from(e).toString(`base64`)}`}i.Host=`${a}:${t.port}`,i[`Proxy-Connection`]||=this.keepAlive?`Keep-Alive`:`close`;for(let e of Object.keys(i))l+=`${e}: ${i[e]}\r\n`;let u=(0,f.parseProxyResponse)(r);r.write(`${l}\r\n`);let{connect:d,buffered:h}=await u;if(e.emit(`proxyConnect`,d),this.emit(`proxyConnect`,d,e),d.statusCode===200)return e.once(`socket`,g),t.secureEndpoint?(p(`Upgrading socket connection to TLS`),s.connect({..._(m(t),`host`,`path`,`port`),socket:r})):r;r.destroy();let v=new o.Socket({writable:!1});return v.readable=!0,e.once(`socket`,e=>{p(`Replaying proxy buffer for failed request`),(0,c.default)(e.listenerCount(`data`)>0),e.push(h),e.push(null)}),v}};h.protocols=[`http`,`https`],e.HttpsProxyAgent=h;function g(e){e.resume()}function _(e,...t){let n={},r;for(r in e)t.includes(r)||(n[r]=e[r]);return n}}))(),D={ftp:21,gopher:70,http:80,https:443,ws:80,wss:443};function O(e){try{return new URL(e)}catch{return null}}function k(e){var t=(typeof e==`string`?O(e):e)||{},n=t.protocol,r=t.host,i=t.port;if(typeof r!=`string`||!r||typeof n!=`string`||(n=n.split(`:`,1)[0],r=r.replace(/:\d*$/,``),i=parseInt(i)||D[n]||0,!A(r,i)))return``;var a=j(n+`_proxy`)||j(`all_proxy`);return a&&a.indexOf(`://`)===-1&&(a=n+`://`+a),a}function A(e,t){var n=j(`no_proxy`).toLowerCase();return!n||n!==`*`&&n.split(/[,\s]/).every(function(n){if(!n)return!0;var r=n.match(/^(.+):(\d+)$/),i=r?r[1]:n,a=r?parseInt(r[2]):0;return a&&a!==t?!0:/^[.*]/.test(i)?(i.charAt(0)===`*`&&(i=i.slice(1)),!e.endsWith(i)):e!==i})}function j(e){return process.env[e.toLowerCase()]||process.env[e.toUpperCase()]||``}var M=r();const N=new class{constructor(){this.websocketAgents=new Map,this.fetch=async(e,t)=>this.hasProxyEnv()?fetch(e,{...t??{},dispatcher:this.getEnvHttpProxyAgent()}):fetch(e,t)}getWebSocketAgent(e){if(!this.hasProxyEnv())return;let t=k(this.getWebSocketProxyLookupUrl(e));if(!t)return;let n=this.websocketAgents.get(t);if(!n){let e=new E.HttpsProxyAgent(t);this.websocketAgents.set(t,e),n=e}return n}getEnvHttpProxyAgent(){return this.envHttpProxyAgent??=new M.EnvHttpProxyAgent,this.envHttpProxyAgent}hasProxyEnv(){if(typeof process>`u`||!process.versions?.node)return!1;let e=process.env;return!!(e.http_proxy||e.HTTP_PROXY||e.https_proxy||e.HTTPS_PROXY)}getWebSocketProxyLookupUrl(e){let t=new URL(e);return t.protocol===`ws:`?t.protocol=`http:`:t.protocol===`wss:`&&(t.protocol=`https:`),t.toString()}},P=(e,t)=>{};async function F(e){let t=e.log??P,n=e.rootPath;if(!o.existsSync(n))throw Error(`watchFolderTree root does not exist: ${n}`);let r,i=t=>{r&&clearTimeout(r),r=setTimeout(()=>e.onChange(t),500)},a=o.watch(n,{recursive:!0},(t,n)=>{if(!n)return;let r=n.split(d.sep).join(`/`);e.ignoreFn(r)||i(r?`change:${r}`:`change`)});return t(`debug`,`watchFolderTree(recursive): ${n}`),{close:()=>a.close()}}const I=(e,t)=>{};function L(){return Date.now()}function R(e){return e<1e3?`${e.toFixed(0)}ms`:`${(e/1e3).toFixed(2)}s`}function ee(e){if(e<1024)return`${e}B`;let t=e/1024;if(t<1024)return`${t.toFixed(1)}KiB`;let n=t/1024;return n<1024?`${n.toFixed(1)}MiB`:`${(n/1024).toFixed(2)}GiB`}function z(e){return`${e}-${Date.now()}-${Math.random().toString(36).slice(2)}`}function B(e){let t=e;return t?.code===`ENOENT`||t?.cause?.code===`ENOENT`}function te(){let e=u.cpus()?.length??1;return Math.min(4,Math.max(1,e-1))}async function ne(e,t,n){let r=Array(e.length),i=0,a=Array(Math.min(t,e.length)).fill(0).map(async()=>{for(;;){let t=i++;if(t>=e.length)return;let a=e[t];r[t]=await n(a)}});return await Promise.all(a),r}function re(e){return`${e}/sync`}function V(e){let t=Buffer.allocUnsafe(4);return t.writeUInt32BE(e>>>0,0),t}async function H(e,t,n,r){let i=re(e.apiUrl),a={"Content-Type":`application/octet-stream`,Authorization:`Bearer ${e.token}`},l=Buffer.from(JSON.stringify(t),`utf-8`),u=Buffer.concat([V(l.length),l]);async function*d(){yield u;for(let e of n){let t=await o.promises.open(e.filePath,`r`);try{let e=await t.stat(),n=0;for(;n<e.size;){let r=Math.min(262144,e.size-n),i=Buffer.allocUnsafe(r),{bytesRead:a}=await t.read(i,0,r,n);if(a<=0)break;n+=a,yield i.subarray(0,a)}}finally{await t.close()}}}let f=c.from(d()),p;if(r===`zstd`){let e=s.createZstdCompress;if(!e)throw Error(`zstd compression not available in this Node.js version`);p=f.pipe(e({level:3})),a[`Content-Encoding`]=`zstd`}else if(r===`gzip`){let e=s.createGzip;if(!e)throw Error(`gzip compression not available in this Node.js version`);p=f.pipe(e({level:6})),a[`Content-Encoding`]=`gzip`}else p=f;let m=new AbortController,h,g=e=>{h=e,m.abort()};f.on(`error`,g),p.on(`error`,g);let _=await N.fetch(i,{method:`POST`,headers:a,body:p,duplex:`half`,signal:m.signal}).catch(e=>{throw h||e}),v=await _.text();if(!_.ok)throw Error(`folder-sync http failed: ${_.status} ${v}`);return JSON.parse(v)}async function U(e){return await new Promise((t,n)=>{let r=p.createHash(`sha256`),i=o.createReadStream(e);i.on(`data`,e=>r.update(e)),i.on(`error`,n),i.on(`end`,()=>t(r.digest(`hex`)))})}async function ie(e,t){let n=d.resolve(e),r=[],i=[n];for(;i.length;){let e=i.pop(),a=await o.promises.readdir(e,{withFileTypes:!0});for(let s of a){let a=d.join(e,s.name),c=d.relative(n,a).split(d.sep).join(`/`);if(s.isDirectory()){if(t(c+`/`))continue;i.push(a);continue}if(!s.isFile()||t(c))continue;let l=await o.promises.stat(a),u=await U(a),f=l.mode&4095;r.push({path:c,size:l.size,sha256:u,absPath:a,mode:f})}}return r.sort((e,t)=>e.path.localeCompare(t.path)),r}let W=null;async function ae(){return W||=new Promise((e,t)=>{let n=m(`xdelta3`,[`-V`]);n.on(`error`,t),n.on(`exit`,n=>{n===0?e():t(Error(`xdelta3 not available (exit=${n})`))})}),await W}async function oe(e,t,n){await new Promise((r,i)=>{let a=m(`xdelta3`,[`-e`,`-s`,e,t,n],{stdio:[`ignore`,`ignore`,`pipe`]}),o=``;a.stderr.on(`data`,e=>o+=e.toString()),a.on(`error`,i),a.on(`exit`,e=>{e===0?r():i(Error(`xdelta3 encode failed (exit=${e}): ${o.trim()}`))})})}async function se(e,t,n){let r=d.join(e,t.split(`/`).join(d.sep));await o.promises.mkdir(d.dirname(r),{recursive:!0}),await o.promises.copyFile(n,r)}function G(e,t){return d.join(e,t.split(`/`).join(d.sep))}async function ce(e,t){let n=(e,n)=>{(t.log??I)(e,`syncFolder: ${n}`)};if(n(`debug`,`setup ${e} watch=${t.watch} basisCacheDir=${t.basisCacheDir}`),!t.watch)return await K(e,t);let r=await K(e,t,`startup`),i=!1,a=!1,o=async n=>{if(i){a=!0;return}i=!0;try{await K(e,t,n)}finally{i=!1,a&&(a=!1,o(`queued-changes`))}},s=await F({rootPath:e,log:n,ignoreFn:t.ignoreFn,onChange:e=>{o(e)}});return{...r,stopWatching:()=>{s.close()}}}async function K(e,t,n,r=0){let i=L(),a=t.log??I,c=(e,t)=>a(e,`syncFolder: ${t}`),l=t.maxPatchBytes??4194304;await ae();let f=await ie(e,t.ignoreFn),p=new Map(f.map(e=>[e.path,e])),m=z(`sync`),h=d.basename(d.resolve(e)),g=s.createZstdCompress?`zstd`:`gzip`;await o.promises.mkdir(t.basisCacheDir,{recursive:!0});let _=0,v=0,y=0,b=0,x=te(),S=[];for(let e of f){let n=G(t.basisCacheDir,e.path);if(!o.existsSync(n)){S.push(e);continue}await U(n)!==e.sha256.toLowerCase()&&S.push(e)}let C=await ne(S,x,async e=>{let n=G(t.basisCacheDir,e.path);if(o.existsSync(n)){let t=await U(n),r=await o.promises.mkdtemp(d.join(u.tmpdir(),`limulator-xdelta3-`)),i=d.join(r,`patch.xdelta3`),a=L();await oe(n,e.absPath,i);let s=L()-a;b+=s;let f=await o.promises.stat(i);if(f.size<=l)return c(`debug`,`delta(file): ${d.posix.basename(e.path)} patchSize=${f.size} encode=${R(s)}`),v+=f.size,{payload:{kind:`delta`,path:e.path,basisSha256:t.toLowerCase(),targetSha256:e.sha256.toLowerCase(),length:f.size},filePath:i,cleanupDir:r};try{await o.promises.rm(r,{recursive:!0,force:!0})}catch{}}return c(`debug`,`full(file): ${e.path} size=${e.size}`),_+=e.size,{payload:{kind:`full`,path:e.path,targetSha256:e.sha256.toLowerCase(),length:e.size},filePath:e.absPath}}),w={id:m,rootName:h,install:t.install,...t.launchMode?{launchMode:t.launchMode}:{},files:f.map(e=>({path:e.path,size:e.size,sha256:e.sha256.toLowerCase(),mode:e.mode})),payloads:C.map(e=>e.payload)},T=C.some(e=>e.payload.kind===`delta`)?`identity`:g;c(`debug`,`sync started files=${f.length}${n?` reason=${n}`:``} compression=${T}`);let E=L(),D;try{D=await H(t,w,C.map(e=>({filePath:e.filePath})),T)}catch(i){if(r<1&&B(i))return c(`warn`,`sync retrying after missing file during upload (ENOENT)`),await K(e,t,n,r+1);throw i}if(y+=L()-E,!D.ok&&D.needFull&&D.needFull.length>0){let e=new Set(D.needFull),n=[];for(let t of e){let e=p.get(t);e&&n.push({payload:{kind:`full`,path:e.path,targetSha256:e.sha256.toLowerCase(),length:e.size},filePath:e.absPath})}if(n.length>0){c(`warn`,`server requested full for ${n.length} files; retrying once`);let e={...w,id:z(`sync`),payloads:n.map(e=>e.payload)},r=L();D=await H(t,e,n.map(e=>({filePath:e.filePath})),g),y+=L()-r}}await Promise.all(C.map(async e=>{if(e.cleanupDir)try{await o.promises.rm(e.cleanupDir,{recursive:!0,force:!0})}catch{}}));let O=L()-i;if(!D.ok)throw Error(D.error??`sync failed`);let k=L()-i,A=_+v;c(`debug`,`sync finished files=${f.length} sent=${ee(A)} syncWork=${R(O)} total=${R(k)}`);let j={};D.installedAppPath&&(j.installedAppPath=D.installedAppPath),D.bundleId&&(j.installedBundleId=D.bundleId);for(let e of f)await se(t.basisCacheDir,e.path,e.absPath);return j}var le=e(n(((e,t)=>{function n(e){return Array.isArray(e)?e:[e]}let r=/^\s+$/,i=/(?:[^\\]|^)\\$/,a=/^\\!/,o=/^\\#/,s=/\r?\n/g,c=/^\.{0,2}\/|^\.{1,2}$/,l=/\/$/,u=`node-ignore`;typeof Symbol<`u`&&(u=Symbol.for(`node-ignore`));let d=u,f=(e,t,n)=>(Object.defineProperty(e,t,{value:n}),n),p=/([0-z])-([0-z])/g,m=()=>!1,h=e=>e.replace(p,(e,t,n)=>t.charCodeAt(0)<=n.charCodeAt(0)?e:``),g=e=>e.startsWith(`!`)||e.startsWith(`\\^`)?`^${e.slice(e[0]===`!`?1:2)}`:e,_=e=>{let{length:t}=e;return e.slice(0,t-t%2)},v=[[/^\uFEFF/,()=>``],[/((?:\\\\)*?)(\\?\s+)$/,(e,t,n)=>t+(n.indexOf(`\\`)===0?` `:``)],[/(\\+?)\s/g,(e,t)=>{let{length:n}=t;return t.slice(0,n-n%2)+` `}],[/[\\$.|*+(){^]/g,e=>`\\${e}`],[/(?!\\)\?/g,()=>`[^/]`],[/^\//,()=>`^`],[/\//g,()=>`\\/`],[/^\^*(?:\\\*\\\*\\\/)+/,()=>`^(?:.*\\/)?`],[/^(?=[^^])/,function(){return/\/(?!$)/.test(this)?`^`:`(?:^|\\/)`}],[/\\\/\\\*\\\*(?=\\\/|$)/g,(e,t,n)=>t+6<n.length?`(?:\\/[^\\/]+)*`:`\\/.+`],[/(^|[^\\]+)(\\\*)+(?=.+)/g,(e,t,n)=>t+n.replace(/\\\*/g,`[^\\/]*`)],[/\\\\\\(?=[$.|*+(){^])/g,()=>`\\`],[/\\\\/g,()=>`\\`],[/(\\)?\[([^\]/]*?)(\\*)($|\])/g,(e,t,n,r,i)=>t===`\\`?`\\[${n}${_(r)}${i}`:i===`]`&&r.length%2==0?`[${g(h(n))}${r}]`:`[]`],[/(?:[^*])$/,e=>/\/$/.test(e)?`${e}$`:`${e}(?=$|\\/$)`]],y=/(^|\\\/)?\\\*$/,b=`regex`,x=`checkRegex`,S={[b](e,t){return`${t?`${t}[^/]+`:`[^/]*`}(?=$|\\/$)`},[x](e,t){return`${t?`${t}[^/]*`:`[^/]*`}(?=$|\\/$)`}},C=e=>v.reduce((t,[n,r])=>t.replace(n,r.bind(e)),e),w=e=>typeof e==`string`,T=e=>e&&w(e)&&!r.test(e)&&!i.test(e)&&e.indexOf(`#`)!==0,E=e=>e.split(s).filter(Boolean);var D=class{constructor(e,t,n,r,i,a){this.pattern=e,this.mark=t,this.negative=i,f(this,`body`,n),f(this,`ignoreCase`,r),f(this,`regexPrefix`,a)}get regex(){let e=`_regex`;return this[e]?this[e]:this._make(b,e)}get checkRegex(){let e=`_checkRegex`;return this[e]?this[e]:this._make(x,e)}_make(e,t){let n=this.regexPrefix.replace(y,S[e]),r=this.ignoreCase?new RegExp(n,`i`):new RegExp(n);return f(this,t,r)}};let O=({pattern:e,mark:t},n)=>{let r=!1,i=e;i.indexOf(`!`)===0&&(r=!0,i=i.substr(1)),i=i.replace(a,`!`).replace(o,`#`);let s=C(i);return new D(e,t,i,n,r,s)};var k=class{constructor(e){this._ignoreCase=e,this._rules=[]}_add(e){if(e&&e[d]){this._rules=this._rules.concat(e._rules._rules),this._added=!0;return}if(w(e)&&(e={pattern:e}),T(e.pattern)){let t=O(e,this._ignoreCase);this._added=!0,this._rules.push(t)}}add(e){return this._added=!1,n(w(e)?E(e):e).forEach(this._add,this),this._added}test(e,t,n){let r=!1,i=!1,a;this._rules.forEach(o=>{let{negative:s}=o;i===s&&r!==i||s&&!r&&!i&&!t||o[n].test(e)&&(r=!s,i=s,a=s?void 0:o)});let o={ignored:r,unignored:i};return a&&(o.rule=a),o}};let A=(e,t)=>{throw new t(e)},j=(e,t,n)=>w(e)?e?!j.isNotRelative(e)||n(`path should be a \`path.relative()\`d string, but got "${t}"`,RangeError):n(`path must not be empty`,TypeError):n(`path must be a string, but got \`${t}\``,TypeError),M=e=>c.test(e);j.isNotRelative=M,j.convert=e=>e;var N=class{constructor({ignorecase:e=!0,ignoreCase:t=e,allowRelativePaths:n=!1}={}){f(this,d,!0),this._rules=new k(t),this._strictPathCheck=!n,this._initCache()}_initCache(){this._ignoreCache=Object.create(null),this._testCache=Object.create(null)}add(e){return this._rules.add(e)&&this._initCache(),this}addPattern(e){return this.add(e)}_test(e,t,n,r){let i=e&&j.convert(e);return j(i,e,this._strictPathCheck?A:m),this._t(i,t,n,r)}checkIgnore(e){if(!l.test(e))return this.test(e);let t=e.split(`/`).filter(Boolean);if(t.pop(),t.length){let e=this._t(t.join(`/`)+`/`,this._testCache,!0,t);if(e.ignored)return e}return this._rules.test(e,!1,x)}_t(e,t,n,r){if(e in t)return t[e];if(r||=e.split(`/`).filter(Boolean),r.pop(),!r.length)return t[e]=this._rules.test(e,n,b);let i=this._t(r.join(`/`)+`/`,t,n,r);return t[e]=i.ignored?i:this._rules.test(e,n,b)}ignores(e){return this._test(e,this._ignoreCache,!1).ignored}createFilter(){return e=>!this.ignores(e)}filter(e){return n(e).filter(this.createFilter())}test(e){return this._test(e,this._testCache,!0)}};let P=e=>new N(e),F=e=>j(e&&j.convert(e),e,m),I=()=>{j.convert=e=>/^\\\\\?\\/.test(e)||/["<>|\u0000-\u001F]+/u.test(e)?e:e.replace(/\\/g,`/`);let e=/^[a-z]:\//i;j.isNotRelative=t=>e.test(t)||M(t)};typeof process<`u`&&process.platform===`win32`&&I(),t.exports=P,P.default=P,t.exports.isPathValid=F,f(t.exports,Symbol.for(`setupWindows`),I)}))(),1);function ue(e){return e.split(d.sep).join(`/`).replace(/^\.\/+/,``).replace(/\/+/g,`/`)}async function de(e,t){let n=d.resolve(e),r=(0,le.default)(),i=d.join(n,`.gitignore`);try{let e=await o.promises.readFile(i,`utf-8`);r.add(e)}catch{}let a=ue(d.relative(n,t.basisCacheDir)).replace(/\/+$/,``),s=a&&a!==`.`&&a!==`..`&&!a.startsWith(`../`);return e=>{let n=ue(e);if(!n)return!1;let i=n.replace(/\/+$/,``);return i===`.git`||i.startsWith(`.git/`)||i.endsWith(`/.git`)||i.includes(`/.git/`)||i===`.DS_Store`||i.endsWith(`/.DS_Store`)||s&&(i===a||i.startsWith(`${a}/`))?!0:!i.endsWith(`.xcconfig`)&&!!(r.ignores(n)||t.additional?.(n))}}var q=n(((e,t)=>{let n=[`nodebuffer`,`arraybuffer`,`fragments`],r=typeof Blob<`u`;r&&n.push(`blob`),t.exports={BINARY_TYPES:n,CLOSE_TIMEOUT:3e4,EMPTY_BUFFER:Buffer.alloc(0),GUID:`258EAFA5-E914-47DA-95CA-C5AB0DC85B11`,hasBlob:r,kForOnEventAttribute:Symbol(`kIsForOnEventAttribute`),kListener:Symbol(`kListener`),kStatusCode:Symbol(`status-code`),kWebSocket:Symbol(`websocket`),NOOP:()=>{}}})),fe=n(((e,n)=>{let{EMPTY_BUFFER:r}=q(),i=Buffer[Symbol.species];function a(e,t){if(e.length===0)return r;if(e.length===1)return e[0];let n=Buffer.allocUnsafe(t),a=0;for(let t=0;t<e.length;t++){let r=e[t];n.set(r,a),a+=r.length}return a<t?new i(n.buffer,n.byteOffset,a):n}function o(e,t,n,r,i){for(let a=0;a<i;a++)n[r+a]=e[a]^t[a&3]}function s(e,t){for(let n=0;n<e.length;n++)e[n]^=t[n&3]}function c(e){return e.length===e.buffer.byteLength?e.buffer:e.buffer.slice(e.byteOffset,e.byteOffset+e.length)}function l(e){if(l.readOnly=!0,Buffer.isBuffer(e))return e;let t;return e instanceof ArrayBuffer?t=new i(e):ArrayBuffer.isView(e)?t=new i(e.buffer,e.byteOffset,e.byteLength):(t=Buffer.from(e),l.readOnly=!1),t}if(n.exports={concat:a,mask:o,toArrayBuffer:c,toBuffer:l,unmask:s},!process.env.WS_NO_BUFFER_UTIL)try{let e=t(`bufferutil`);n.exports.mask=function(t,n,r,i,a){a<48?o(t,n,r,i,a):e.mask(t,n,r,i,a)},n.exports.unmask=function(t,n){t.length<32?s(t,n):e.unmask(t,n)}}catch{}})),pe=n(((e,t)=>{let n=Symbol(`kDone`),r=Symbol(`kRun`);t.exports=class{constructor(e){this[n]=()=>{this.pending--,this[r]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[r]()}[r](){if(this.pending!==this.concurrency&&this.jobs.length){let e=this.jobs.shift();this.pending++,e(this[n])}}}})),J=n(((e,n)=>{let r=t(`zlib`),i=fe(),a=pe(),{kStatusCode:o}=q(),s=Buffer[Symbol.species],c=Buffer.from([0,0,255,255]),l=Symbol(`permessage-deflate`),u=Symbol(`total-length`),d=Symbol(`callback`),f=Symbol(`buffers`),p=Symbol(`error`),m;n.exports=class{constructor(e){if(this._options=e||{},this._threshold=this._options.threshold===void 0?1024:this._options.threshold,this._maxPayload=this._options.maxPayload|0,this._isServer=!!this._options.isServer,this._deflate=null,this._inflate=null,this.params=null,!m){let e=this._options.concurrencyLimit===void 0?10:this._options.concurrencyLimit;m=new a(e)}}static get extensionName(){return`permessage-deflate`}offer(){let e={};return this._options.serverNoContextTakeover&&(e.server_no_context_takeover=!0),this._options.clientNoContextTakeover&&(e.client_no_context_takeover=!0),this._options.serverMaxWindowBits&&(e.server_max_window_bits=this._options.serverMaxWindowBits),this._options.clientMaxWindowBits?e.client_max_window_bits=this._options.clientMaxWindowBits:this._options.clientMaxWindowBits??(e.client_max_window_bits=!0),e}accept(e){return e=this.normalizeParams(e),this.params=this._isServer?this.acceptAsServer(e):this.acceptAsClient(e),this.params}cleanup(){if(this._inflate&&=(this._inflate.close(),null),this._deflate){let e=this._deflate[d];this._deflate.close(),this._deflate=null,e&&e(Error(`The deflate stream was closed while data was being processed`))}}acceptAsServer(e){let t=this._options,n=e.find(e=>!(t.serverNoContextTakeover===!1&&e.server_no_context_takeover||e.server_max_window_bits&&(t.serverMaxWindowBits===!1||typeof t.serverMaxWindowBits==`number`&&t.serverMaxWindowBits>e.server_max_window_bits)||typeof t.clientMaxWindowBits==`number`&&!e.client_max_window_bits));if(!n)throw Error(`None of the extension offers can be accepted`);return t.serverNoContextTakeover&&(n.server_no_context_takeover=!0),t.clientNoContextTakeover&&(n.client_no_context_takeover=!0),typeof t.serverMaxWindowBits==`number`&&(n.server_max_window_bits=t.serverMaxWindowBits),typeof t.clientMaxWindowBits==`number`?n.client_max_window_bits=t.clientMaxWindowBits:(n.client_max_window_bits===!0||t.clientMaxWindowBits===!1)&&delete n.client_max_window_bits,n}acceptAsClient(e){let t=e[0];if(this._options.clientNoContextTakeover===!1&&t.client_no_context_takeover)throw Error(`Unexpected parameter "client_no_context_takeover"`);if(!t.client_max_window_bits)typeof this._options.clientMaxWindowBits==`number`&&(t.client_max_window_bits=this._options.clientMaxWindowBits);else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits==`number`&&t.client_max_window_bits>this._options.clientMaxWindowBits)throw Error(`Unexpected or invalid parameter "client_max_window_bits"`);return t}normalizeParams(e){return e.forEach(e=>{Object.keys(e).forEach(t=>{let n=e[t];if(n.length>1)throw Error(`Parameter "${t}" must have only a single value`);if(n=n[0],t===`client_max_window_bits`){if(n!==!0){let e=+n;if(!Number.isInteger(e)||e<8||e>15)throw TypeError(`Invalid value for parameter "${t}": ${n}`);n=e}else if(!this._isServer)throw TypeError(`Invalid value for parameter "${t}": ${n}`)}else if(t===`server_max_window_bits`){let e=+n;if(!Number.isInteger(e)||e<8||e>15)throw TypeError(`Invalid value for parameter "${t}": ${n}`);n=e}else if(t===`client_no_context_takeover`||t===`server_no_context_takeover`){if(n!==!0)throw TypeError(`Invalid value for parameter "${t}": ${n}`)}else throw Error(`Unknown parameter "${t}"`);e[t]=n})}),e}decompress(e,t,n){m.add(r=>{this._decompress(e,t,(e,t)=>{r(),n(e,t)})})}compress(e,t,n){m.add(r=>{this._compress(e,t,(e,t)=>{r(),n(e,t)})})}_decompress(e,t,n){let a=this._isServer?`client`:`server`;if(!this._inflate){let e=`${a}_max_window_bits`,t=typeof this.params[e]==`number`?this.params[e]:r.Z_DEFAULT_WINDOWBITS;this._inflate=r.createInflateRaw({...this._options.zlibInflateOptions,windowBits:t}),this._inflate[l]=this,this._inflate[u]=0,this._inflate[f]=[],this._inflate.on(`error`,_),this._inflate.on(`data`,g)}this._inflate[d]=n,this._inflate.write(e),t&&this._inflate.write(c),this._inflate.flush(()=>{let e=this._inflate[p];if(e){this._inflate.close(),this._inflate=null,n(e);return}let r=i.concat(this._inflate[f],this._inflate[u]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[u]=0,this._inflate[f]=[],t&&this.params[`${a}_no_context_takeover`]&&this._inflate.reset()),n(null,r)})}_compress(e,t,n){let a=this._isServer?`server`:`client`;if(!this._deflate){let e=`${a}_max_window_bits`,t=typeof this.params[e]==`number`?this.params[e]:r.Z_DEFAULT_WINDOWBITS;this._deflate=r.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:t}),this._deflate[u]=0,this._deflate[f]=[],this._deflate.on(`data`,h)}this._deflate[d]=n,this._deflate.write(e),this._deflate.flush(r.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let e=i.concat(this._deflate[f],this._deflate[u]);t&&(e=new s(e.buffer,e.byteOffset,e.length-4)),this._deflate[d]=null,this._deflate[u]=0,this._deflate[f]=[],t&&this.params[`${a}_no_context_takeover`]&&this._deflate.reset(),n(null,e)})}};function h(e){this[f].push(e),this[u]+=e.length}function g(e){if(this[u]+=e.length,this[l]._maxPayload<1||this[u]<=this[l]._maxPayload){this[f].push(e);return}this[p]=RangeError(`Max payload size exceeded`),this[p].code=`WS_ERR_UNSUPPORTED_MESSAGE_LENGTH`,this[p][o]=1009,this.removeListener(`data`,g),this.reset()}function _(e){if(this[l]._inflate=null,this[p]){this[d](this[p]);return}e[o]=1007,this[d](e)}})),Y=n(((e,n)=>{let{isUtf8:r}=t(`buffer`),{hasBlob:i}=q(),a=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0];function o(e){return e>=1e3&&e<=1014&&e!==1004&&e!==1005&&e!==1006||e>=3e3&&e<=4999}function s(e){let t=e.length,n=0;for(;n<t;)if(!(e[n]&128))n++;else if((e[n]&224)==192){if(n+1===t||(e[n+1]&192)!=128||(e[n]&254)==192)return!1;n+=2}else if((e[n]&240)==224){if(n+2>=t||(e[n+1]&192)!=128||(e[n+2]&192)!=128||e[n]===224&&(e[n+1]&224)==128||e[n]===237&&(e[n+1]&224)==160)return!1;n+=3}else if((e[n]&248)==240){if(n+3>=t||(e[n+1]&192)!=128||(e[n+2]&192)!=128||(e[n+3]&192)!=128||e[n]===240&&(e[n+1]&240)==128||e[n]===244&&e[n+1]>143||e[n]>244)return!1;n+=4}else return!1;return!0}function c(e){return i&&typeof e==`object`&&typeof e.arrayBuffer==`function`&&typeof e.type==`string`&&typeof e.stream==`function`&&(e[Symbol.toStringTag]===`Blob`||e[Symbol.toStringTag]===`File`)}if(n.exports={isBlob:c,isValidStatusCode:o,isValidUTF8:s,tokenChars:a},r)n.exports.isValidUTF8=function(e){return e.length<24?s(e):r(e)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let e=t(`utf-8-validate`);n.exports.isValidUTF8=function(t){return t.length<32?s(t):e(t)}}catch{}})),X=n(((e,n)=>{let{Writable:r}=t(`stream`),i=J(),{BINARY_TYPES:a,EMPTY_BUFFER:o,kStatusCode:s,kWebSocket:c}=q(),{concat:l,toArrayBuffer:u,unmask:d}=fe(),{isValidStatusCode:f,isValidUTF8:p}=Y(),m=Buffer[Symbol.species];n.exports=class extends r{constructor(e={}){super(),this._allowSynchronousEvents=e.allowSynchronousEvents===void 0||e.allowSynchronousEvents,this._binaryType=e.binaryType||a[0],this._extensions=e.extensions||{},this._isServer=!!e.isServer,this._maxBufferedChunks=e.maxBufferedChunks|0,this._maxFragments=e.maxFragments|0,this._maxPayload=e.maxPayload|0,this._skipUTF8Validation=!!e.skipUTF8Validation,this[c]=void 0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._errored=!1,this._loop=!1,this._state=0}_write(e,t,n){if(this._opcode===8&&this._state==0)return n();if(this._maxBufferedChunks>0&&this._buffers.length>=this._maxBufferedChunks){n(this.createError(RangeError,`Too many buffered chunks`,!1,1008,`WS_ERR_TOO_MANY_BUFFERED_PARTS`));return}this._bufferedBytes+=e.length,this._buffers.push(e),this.startLoop(n)}consume(e){if(this._bufferedBytes-=e,e===this._buffers[0].length)return this._buffers.shift();if(e<this._buffers[0].length){let t=this._buffers[0];return this._buffers[0]=new m(t.buffer,t.byteOffset+e,t.length-e),new m(t.buffer,t.byteOffset,e)}let t=Buffer.allocUnsafe(e);do{let n=this._buffers[0],r=t.length-e;e>=n.length?t.set(this._buffers.shift(),r):(t.set(new Uint8Array(n.buffer,n.byteOffset,e),r),this._buffers[0]=new m(n.buffer,n.byteOffset+e,n.length-e)),e-=n.length}while(e>0);return t}startLoop(e){this._loop=!0;do switch(this._state){case 0:this.getInfo(e);break;case 1:this.getPayloadLength16(e);break;case 2:this.getPayloadLength64(e);break;case 3:this.getMask();break;case 4:this.getData(e);break;case 5:case 6:this._loop=!1;return}while(this._loop);this._errored||e()}getInfo(e){if(this._bufferedBytes<2){this._loop=!1;return}let t=this.consume(2);if(t[0]&48){e(this.createError(RangeError,`RSV2 and RSV3 must be clear`,!0,1002,`WS_ERR_UNEXPECTED_RSV_2_3`));return}let n=(t[0]&64)==64;if(n&&!this._extensions[i.extensionName]){e(this.createError(RangeError,`RSV1 must be clear`,!0,1002,`WS_ERR_UNEXPECTED_RSV_1`));return}if(this._fin=(t[0]&128)==128,this._opcode=t[0]&15,this._payloadLength=t[1]&127,this._opcode===0){if(n){e(this.createError(RangeError,`RSV1 must be clear`,!0,1002,`WS_ERR_UNEXPECTED_RSV_1`));return}if(!this._fragmented){e(this.createError(RangeError,`invalid opcode 0`,!0,1002,`WS_ERR_INVALID_OPCODE`));return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){e(this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,`WS_ERR_INVALID_OPCODE`));return}this._compressed=n}else if(this._opcode>7&&this._opcode<11){if(!this._fin){e(this.createError(RangeError,`FIN must be set`,!0,1002,`WS_ERR_EXPECTED_FIN`));return}if(n){e(this.createError(RangeError,`RSV1 must be clear`,!0,1002,`WS_ERR_UNEXPECTED_RSV_1`));return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){e(this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,`WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH`));return}}else{e(this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,`WS_ERR_INVALID_OPCODE`));return}if(!this._fin&&!this._fragmented&&(this._fragmented=this._opcode),this._masked=(t[1]&128)==128,this._isServer){if(!this._masked){e(this.createError(RangeError,`MASK must be set`,!0,1002,`WS_ERR_EXPECTED_MASK`));return}}else if(this._masked){e(this.createError(RangeError,`MASK must be clear`,!0,1002,`WS_ERR_UNEXPECTED_MASK`));return}this._payloadLength===126?this._state=1:this._payloadLength===127?this._state=2:this.haveLength(e)}getPayloadLength16(e){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(e)}getPayloadLength64(e){if(this._bufferedBytes<8){this._loop=!1;return}let t=this.consume(8),n=t.readUInt32BE(0);if(n>2**21-1){e(this.createError(RangeError,`Unsupported WebSocket frame: payload length > 2^53 - 1`,!1,1009,`WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH`));return}this._payloadLength=n*2**32+t.readUInt32BE(4),this.haveLength(e)}haveLength(e){if(this._payloadLength&&this._opcode<8&&(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0)){e(this.createError(RangeError,`Max payload size exceeded`,!1,1009,`WS_ERR_UNSUPPORTED_MESSAGE_LENGTH`));return}this._state=this._masked?3:4}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=4}getData(e){let t=o;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}t=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0&&d(t,this._mask)}if(this._opcode>7){this.controlMessage(t,e);return}if(this._compressed){this._state=5,this.decompress(t,e);return}if(t.length){if(this._maxFragments>0&&this._fragments.length>=this._maxFragments){e(this.createError(RangeError,`Too many message fragments`,!1,1008,`WS_ERR_TOO_MANY_BUFFERED_PARTS`));return}this._messageLength=this._totalPayloadLength,this._fragments.push(t)}this.dataMessage(e)}decompress(e,t){this._extensions[i.extensionName].decompress(e,this._fin,(e,n)=>{if(e)return t(e);if(n.length){if(this._messageLength+=n.length,this._messageLength>this._maxPayload&&this._maxPayload>0){t(this.createError(RangeError,`Max payload size exceeded`,!1,1009,`WS_ERR_UNSUPPORTED_MESSAGE_LENGTH`));return}if(this._maxFragments>0&&this._fragments.length>=this._maxFragments){t(this.createError(RangeError,`Too many message fragments`,!1,1008,`WS_ERR_TOO_MANY_BUFFERED_PARTS`));return}this._fragments.push(n)}this.dataMessage(t),this._state===0&&this.startLoop(t)})}dataMessage(e){if(!this._fin){this._state=0;return}let t=this._messageLength,n=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let r;r=this._binaryType===`nodebuffer`?l(n,t):this._binaryType===`arraybuffer`?u(l(n,t)):this._binaryType===`blob`?new Blob(n):n,this._allowSynchronousEvents?(this.emit(`message`,r,!0),this._state=0):(this._state=6,setImmediate(()=>{this.emit(`message`,r,!0),this._state=0,this.startLoop(e)}))}else{let r=l(n,t);if(!this._skipUTF8Validation&&!p(r)){e(this.createError(Error,`invalid UTF-8 sequence`,!0,1007,`WS_ERR_INVALID_UTF8`));return}this._state===5||this._allowSynchronousEvents?(this.emit(`message`,r,!1),this._state=0):(this._state=6,setImmediate(()=>{this.emit(`message`,r,!1),this._state=0,this.startLoop(e)}))}}controlMessage(e,t){if(this._opcode===8){if(e.length===0)this._loop=!1,this.emit(`conclude`,1005,o),this.end();else{let n=e.readUInt16BE(0);if(!f(n)){t(this.createError(RangeError,`invalid status code ${n}`,!0,1002,`WS_ERR_INVALID_CLOSE_CODE`));return}let r=new m(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!p(r)){t(this.createError(Error,`invalid UTF-8 sequence`,!0,1007,`WS_ERR_INVALID_UTF8`));return}this._loop=!1,this.emit(`conclude`,n,r),this.end()}this._state=0;return}this._allowSynchronousEvents?(this.emit(this._opcode===9?`ping`:`pong`,e),this._state=0):(this._state=6,setImmediate(()=>{this.emit(this._opcode===9?`ping`:`pong`,e),this._state=0,this.startLoop(t)}))}createError(e,t,n,r,i){this._loop=!1,this._errored=!0;let a=new e(n?`Invalid WebSocket frame: ${t}`:t);return Error.captureStackTrace(a,this.createError),a.code=i,a[s]=r,a}}})),me=n(((e,n)=>{let{Duplex:r}=t(`stream`),{randomFillSync:i}=t(`crypto`),{types:{isUint8Array:a}}=t(`util`),o=J(),{EMPTY_BUFFER:s,kWebSocket:c,NOOP:l}=q(),{isBlob:u,isValidStatusCode:d}=Y(),{mask:f,toBuffer:p}=fe(),m=Symbol(`kByteLength`),h=Buffer.alloc(4),g=8192,_,v=g;n.exports=class e{constructor(e,t,n){this._extensions=t||{},n&&(this._generateMask=n,this._maskBuffer=Buffer.alloc(4)),this._socket=e,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=0,this.onerror=l,this[c]=void 0}static frame(e,t){let n,r=!1,a=2,o=!1;t.mask&&(n=t.maskBuffer||h,t.generateMask?t.generateMask(n):(v===g&&(_===void 0&&(_=Buffer.alloc(g)),i(_,0,g),v=0),n[0]=_[v++],n[1]=_[v++],n[2]=_[v++],n[3]=_[v++]),o=(n[0]|n[1]|n[2]|n[3])===0,a=6);let s;typeof e==`string`?(!t.mask||o)&&t[m]!==void 0?s=t[m]:(e=Buffer.from(e),s=e.length):(s=e.length,r=t.mask&&t.readOnly&&!o);let c=s;s>=65536?(a+=8,c=127):s>125&&(a+=2,c=126);let l=Buffer.allocUnsafe(r?s+a:a);return l[0]=t.fin?t.opcode|128:t.opcode,t.rsv1&&(l[0]|=64),l[1]=c,c===126?l.writeUInt16BE(s,2):c===127&&(l[2]=l[3]=0,l.writeUIntBE(s,4,6)),!t.mask||(l[1]|=128,l[a-4]=n[0],l[a-3]=n[1],l[a-2]=n[2],l[a-1]=n[3],o)?[l,e]:r?(f(e,n,l,a,s),[l]):(f(e,n,e,0,s),[l,e])}close(t,n,r,i){let o;if(t===void 0)o=s;else if(typeof t!=`number`||!d(t))throw TypeError(`First argument must be a valid error code number`);else if(n===void 0||!n.length)o=Buffer.allocUnsafe(2),o.writeUInt16BE(t,0);else{let e=Buffer.byteLength(n);if(e>123)throw RangeError(`The message must not be greater than 123 bytes`);if(o=Buffer.allocUnsafe(2+e),o.writeUInt16BE(t,0),typeof n==`string`)o.write(n,2);else if(a(n))o.set(n,2);else throw TypeError(`Second argument must be a string or a Uint8Array`)}let c={[m]:o.length,fin:!0,generateMask:this._generateMask,mask:r,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};this._state===0?this.sendFrame(e.frame(o,c),i):this.enqueue([this.dispatch,o,!1,c,i])}ping(t,n,r){let i,a;if(typeof t==`string`?(i=Buffer.byteLength(t),a=!1):u(t)?(i=t.size,a=!1):(t=p(t),i=t.length,a=p.readOnly),i>125)throw RangeError(`The data size must not be greater than 125 bytes`);let o={[m]:i,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:9,readOnly:a,rsv1:!1};u(t)?this._state===0?this.getBlobData(t,!1,o,r):this.enqueue([this.getBlobData,t,!1,o,r]):this._state===0?this.sendFrame(e.frame(t,o),r):this.enqueue([this.dispatch,t,!1,o,r])}pong(t,n,r){let i,a;if(typeof t==`string`?(i=Buffer.byteLength(t),a=!1):u(t)?(i=t.size,a=!1):(t=p(t),i=t.length,a=p.readOnly),i>125)throw RangeError(`The data size must not be greater than 125 bytes`);let o={[m]:i,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:10,readOnly:a,rsv1:!1};u(t)?this._state===0?this.getBlobData(t,!1,o,r):this.enqueue([this.getBlobData,t,!1,o,r]):this._state===0?this.sendFrame(e.frame(t,o),r):this.enqueue([this.dispatch,t,!1,o,r])}send(e,t,n){let r=this._extensions[o.extensionName],i=t.binary?2:1,a=t.compress,s,c;typeof e==`string`?(s=Buffer.byteLength(e),c=!1):u(e)?(s=e.size,c=!1):(e=p(e),s=e.length,c=p.readOnly),this._firstFragment?(this._firstFragment=!1,a&&r&&r.params[r._isServer?`server_no_context_takeover`:`client_no_context_takeover`]&&(a=s>=r._threshold),this._compress=a):(a=!1,i=0),t.fin&&(this._firstFragment=!0);let l={[m]:s,fin:t.fin,generateMask:this._generateMask,mask:t.mask,maskBuffer:this._maskBuffer,opcode:i,readOnly:c,rsv1:a};u(e)?this._state===0?this.getBlobData(e,this._compress,l,n):this.enqueue([this.getBlobData,e,this._compress,l,n]):this._state===0?this.dispatch(e,this._compress,l,n):this.enqueue([this.dispatch,e,this._compress,l,n])}getBlobData(t,n,r,i){this._bufferedBytes+=r[m],this._state=2,t.arrayBuffer().then(t=>{if(this._socket.destroyed){let e=Error(`The socket was closed while the blob was being read`);process.nextTick(y,this,e,i);return}this._bufferedBytes-=r[m];let a=p(t);n?this.dispatch(a,n,r,i):(this._state=0,this.sendFrame(e.frame(a,r),i),this.dequeue())}).catch(e=>{process.nextTick(b,this,e,i)})}dispatch(t,n,r,i){if(!n){this.sendFrame(e.frame(t,r),i);return}let a=this._extensions[o.extensionName];this._bufferedBytes+=r[m],this._state=1,a.compress(t,r.fin,(t,n)=>{if(this._socket.destroyed){let e=Error(`The socket was closed while data was being compressed`);y(this,e,i);return}this._bufferedBytes-=r[m],this._state=0,r.readOnly=!1,this.sendFrame(e.frame(n,r),i),this.dequeue()})}dequeue(){for(;this._state===0&&this._queue.length;){let e=this._queue.shift();this._bufferedBytes-=e[3][m],Reflect.apply(e[0],this,e.slice(1))}}enqueue(e){this._bufferedBytes+=e[3][m],this._queue.push(e)}sendFrame(e,t){e.length===2?(this._socket.cork(),this._socket.write(e[0]),this._socket.write(e[1],t),this._socket.uncork()):this._socket.write(e[0],t)}};function y(e,t,n){typeof n==`function`&&n(t);for(let n=0;n<e._queue.length;n++){let r=e._queue[n],i=r[r.length-1];typeof i==`function`&&i(t)}}function b(e,t,n){y(e,t,n),e.onerror(t)}})),he=n(((e,t)=>{let{kForOnEventAttribute:n,kListener:r}=q(),i=Symbol(`kCode`),a=Symbol(`kData`),o=Symbol(`kError`),s=Symbol(`kMessage`),c=Symbol(`kReason`),l=Symbol(`kTarget`),u=Symbol(`kType`),d=Symbol(`kWasClean`);var f=class{constructor(e){this[l]=null,this[u]=e}get target(){return this[l]}get type(){return this[u]}};Object.defineProperty(f.prototype,"target",{enumerable:!0}),Object.defineProperty(f.prototype,"type",{enumerable:!0});var p=class extends f{constructor(e,t={}){super(e),this[i]=t.code===void 0?0:t.code,this[c]=t.reason===void 0?``:t.reason,this[d]=t.wasClean!==void 0&&t.wasClean}get code(){return this[i]}get reason(){return this[c]}get wasClean(){return this[d]}};Object.defineProperty(p.prototype,"code",{enumerable:!0}),Object.defineProperty(p.prototype,"reason",{enumerable:!0}),Object.defineProperty(p.prototype,"wasClean",{enumerable:!0});var m=class extends f{constructor(e,t={}){super(e),this[o]=t.error===void 0?null:t.error,this[s]=t.message===void 0?``:t.message}get error(){return this[o]}get message(){return this[s]}};Object.defineProperty(m.prototype,"error",{enumerable:!0}),Object.defineProperty(m.prototype,"message",{enumerable:!0});var h=class extends f{constructor(e,t={}){super(e),this[a]=t.data===void 0?null:t.data}get data(){return this[a]}};Object.defineProperty(h.prototype,"data",{enumerable:!0}),t.exports={CloseEvent:p,ErrorEvent:m,Event:f,EventTarget:{addEventListener(e,t,i={}){for(let a of this.listeners(e))if(!i[n]&&a[r]===t&&!a[n])return;let a;if(e===`message`)a=function(e,n){let r=new h(`message`,{data:n?e:e.toString()});r[l]=this,g(t,this,r)};else if(e===`close`)a=function(e,n){let r=new p(`close`,{code:e,reason:n.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});r[l]=this,g(t,this,r)};else if(e===`error`)a=function(e){let n=new m(`error`,{error:e,message:e.message});n[l]=this,g(t,this,n)};else if(e===`open`)a=function(){let e=new f(`open`);e[l]=this,g(t,this,e)};else return;a[n]=!!i[n],a[r]=t,i.once?this.once(e,a):this.on(e,a)},removeEventListener(e,t){for(let i of this.listeners(e))if(i[r]===t&&!i[n]){this.removeListener(e,i);break}}},MessageEvent:h};function g(e,t,n){typeof e==`object`&&e.handleEvent?e.handleEvent.call(e,n):e.call(t,n)}})),Z=n(((e,t)=>{let{tokenChars:n}=Y();function r(e,t,n){e[t]===void 0?e[t]=[n]:e[t].push(n)}function i(e){let t=Object.create(null),i=Object.create(null),a=!1,o=!1,s=!1,c,l,u=-1,d=-1,f=-1,p=0;for(;p<e.length;p++)if(d=e.charCodeAt(p),c===void 0){if(f===-1&&n[d]===1)u===-1&&(u=p);else if(p!==0&&(d===32||d===9))f===-1&&u!==-1&&(f=p);else if(d===59||d===44){if(u===-1)throw SyntaxError(`Unexpected character at index ${p}`);f===-1&&(f=p);let n=e.slice(u,f);d===44?(r(t,n,i),i=Object.create(null)):c=n,u=f=-1}else throw SyntaxError(`Unexpected character at index ${p}`)}else if(l===void 0){if(f===-1&&n[d]===1)u===-1&&(u=p);else if(d===32||d===9)f===-1&&u!==-1&&(f=p);else if(d===59||d===44){if(u===-1)throw SyntaxError(`Unexpected character at index ${p}`);f===-1&&(f=p),r(i,e.slice(u,f),!0),d===44&&(r(t,c,i),i=Object.create(null),c=void 0),u=f=-1}else if(d===61&&u!==-1&&f===-1)l=e.slice(u,p),u=f=-1;else throw SyntaxError(`Unexpected character at index ${p}`)}else if(o){if(n[d]!==1)throw SyntaxError(`Unexpected character at index ${p}`);u===-1?u=p:a||=!0,o=!1}else if(s){if(n[d]===1)u===-1&&(u=p);else if(d===34&&u!==-1)s=!1,f=p;else if(d===92)o=!0;else throw SyntaxError(`Unexpected character at index ${p}`)}else if(d===34&&e.charCodeAt(p-1)===61)s=!0;else if(f===-1&&n[d]===1)u===-1&&(u=p);else if(u!==-1&&(d===32||d===9))f===-1&&(f=p);else if(d===59||d===44){if(u===-1)throw SyntaxError(`Unexpected character at index ${p}`);f===-1&&(f=p);let n=e.slice(u,f);a&&=(n=n.replace(/\\/g,``),!1),r(i,l,n),d===44&&(r(t,c,i),i=Object.create(null),c=void 0),l=void 0,u=f=-1}else throw SyntaxError(`Unexpected character at index ${p}`);if(u===-1||s||d===32||d===9)throw SyntaxError(`Unexpected end of input`);f===-1&&(f=p);let m=e.slice(u,f);return c===void 0?r(t,m,i):(l===void 0?r(i,m,!0):a?r(i,l,m.replace(/\\/g,``)):r(i,l,m),r(t,c,i)),t}function a(e){return Object.keys(e).map(t=>{let n=e[t];return Array.isArray(n)||(n=[n]),n.map(e=>[t].concat(Object.keys(e).map(t=>{let n=e[t];return Array.isArray(n)||(n=[n]),n.map(e=>e===!0?t:`${t}=${e}`).join(`; `)})).join(`; `)).join(`, `)}).join(`, `)}t.exports={format:a,parse:i}})),ge=n(((e,n)=>{let r=t(`events`),i=t(`https`),a=t(`http`),o=t(`net`),s=t(`tls`),{randomBytes:c,createHash:l}=t(`crypto`),{Duplex:u,Readable:d}=t(`stream`),{URL:f}=t(`url`),p=J(),m=X(),h=me(),{isBlob:g}=Y(),{BINARY_TYPES:_,CLOSE_TIMEOUT:v,EMPTY_BUFFER:y,GUID:b,kForOnEventAttribute:x,kListener:S,kStatusCode:C,kWebSocket:w,NOOP:T}=q(),{EventTarget:{addEventListener:E,removeEventListener:D}}=he(),{format:O,parse:k}=Z(),{toBuffer:A}=fe(),j=Symbol(`kAborted`),M=[8,13],N=[`CONNECTING`,`OPEN`,`CLOSING`,`CLOSED`],P=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;var F=class e extends r{constructor(t,n,r){super(),this._binaryType=_[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=y,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol=``,this._readyState=e.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,t===null?(this._autoPong=r.autoPong,this._closeTimeout=r.closeTimeout,this._isServer=!0):(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,n===void 0?n=[]:Array.isArray(n)||(typeof n==`object`&&n?(r=n,n=[]):n=[n]),I(this,t,n,r))}get binaryType(){return this._binaryType}set binaryType(e){_.includes(e)&&(this._binaryType=e,this._receiver&&(this._receiver._binaryType=e))}get bufferedAmount(){return this._socket?this._socket._writableState.length+this._sender._bufferedBytes:this._bufferedAmount}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(t,n,r){let i=new m({allowSynchronousEvents:r.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxBufferedChunks:r.maxBufferedChunks,maxFragments:r.maxFragments,maxPayload:r.maxPayload,skipUTF8Validation:r.skipUTF8Validation}),a=new h(t,this._extensions,r.generateMask);this._receiver=i,this._sender=a,this._socket=t,i[w]=this,a[w]=this,t[w]=this,i.on(`conclude`,te),i.on(`drain`,ne),i.on(`error`,re),i.on(`message`,H),i.on(`ping`,U),i.on(`pong`,ie),a.onerror=ae,t.setTimeout&&t.setTimeout(0),t.setNoDelay&&t.setNoDelay(),n.length>0&&t.unshift(n),t.on(`close`,se),t.on(`data`,G),t.on(`end`,ce),t.on(`error`,K),this._readyState=e.OPEN,this.emit(`open`)}emitClose(){if(!this._socket){this._readyState=e.CLOSED,this.emit(`close`,this._closeCode,this._closeMessage);return}this._extensions[p.extensionName]&&this._extensions[p.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=e.CLOSED,this.emit(`close`,this._closeCode,this._closeMessage)}close(t,n){if(this.readyState!==e.CLOSED){if(this.readyState===e.CONNECTING){z(this,this._req,`WebSocket was closed before the connection was established`);return}if(this.readyState===e.CLOSING){this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end();return}this._readyState=e.CLOSING,this._sender.close(t,n,!this._isServer,e=>{e||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())}),oe(this)}}pause(){this.readyState!==e.CONNECTING&&this.readyState!==e.CLOSED&&(this._paused=!0,this._socket.pause())}ping(t,n,r){if(this.readyState===e.CONNECTING)throw Error(`WebSocket is not open: readyState 0 (CONNECTING)`);if(typeof t==`function`?(r=t,t=n=void 0):typeof n==`function`&&(r=n,n=void 0),typeof t==`number`&&(t=t.toString()),this.readyState!==e.OPEN){B(this,t,r);return}n===void 0&&(n=!this._isServer),this._sender.ping(t||y,n,r)}pong(t,n,r){if(this.readyState===e.CONNECTING)throw Error(`WebSocket is not open: readyState 0 (CONNECTING)`);if(typeof t==`function`?(r=t,t=n=void 0):typeof n==`function`&&(r=n,n=void 0),typeof t==`number`&&(t=t.toString()),this.readyState!==e.OPEN){B(this,t,r);return}n===void 0&&(n=!this._isServer),this._sender.pong(t||y,n,r)}resume(){this.readyState!==e.CONNECTING&&this.readyState!==e.CLOSED&&(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(t,n,r){if(this.readyState===e.CONNECTING)throw Error(`WebSocket is not open: readyState 0 (CONNECTING)`);if(typeof n==`function`&&(r=n,n={}),typeof t==`number`&&(t=t.toString()),this.readyState!==e.OPEN){B(this,t,r);return}let i={binary:typeof t!=`string`,mask:!this._isServer,compress:!0,fin:!0,...n};this._extensions[p.extensionName]||(i.compress=!1),this._sender.send(t||y,i,r)}terminate(){if(this.readyState!==e.CLOSED){if(this.readyState===e.CONNECTING){z(this,this._req,`WebSocket was closed before the connection was established`);return}this._socket&&(this._readyState=e.CLOSING,this._socket.destroy())}}};Object.defineProperty(F,"CONNECTING",{enumerable:!0,value:N.indexOf(`CONNECTING`)}),Object.defineProperty(F.prototype,"CONNECTING",{enumerable:!0,value:N.indexOf(`CONNECTING`)}),Object.defineProperty(F,"OPEN",{enumerable:!0,value:N.indexOf(`OPEN`)}),Object.defineProperty(F.prototype,"OPEN",{enumerable:!0,value:N.indexOf(`OPEN`)}),Object.defineProperty(F,"CLOSING",{enumerable:!0,value:N.indexOf(`CLOSING`)}),Object.defineProperty(F.prototype,"CLOSING",{enumerable:!0,value:N.indexOf(`CLOSING`)}),Object.defineProperty(F,"CLOSED",{enumerable:!0,value:N.indexOf(`CLOSED`)}),Object.defineProperty(F.prototype,"CLOSED",{enumerable:!0,value:N.indexOf(`CLOSED`)}),[`binaryType`,`bufferedAmount`,`extensions`,`isPaused`,`protocol`,`readyState`,`url`].forEach(e=>{Object.defineProperty(F.prototype,e,{enumerable:!0})}),[`open`,`error`,`close`,`message`].forEach(e=>{Object.defineProperty(F.prototype,`on${e}`,{enumerable:!0,get(){for(let t of this.listeners(e))if(t[x])return t[S];return null},set(t){for(let t of this.listeners(e))if(t[x]){this.removeListener(e,t);break}typeof t==`function`&&this.addEventListener(e,t,{[x]:!0})}})}),F.prototype.addEventListener=E,F.prototype.removeEventListener=D,n.exports=F;function I(e,t,n,r){let o={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:v,protocolVersion:M[1],maxBufferedChunks:1048576,maxFragments:131072,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...r,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:`GET`,host:void 0,path:void 0,port:void 0};if(e._autoPong=o.autoPong,e._closeTimeout=o.closeTimeout,!M.includes(o.protocolVersion))throw RangeError(`Unsupported protocol version: ${o.protocolVersion} (supported versions: ${M.join(`, `)})`);let s;if(t instanceof f)s=t;else try{s=new f(t)}catch{throw SyntaxError(`Invalid URL: ${t}`)}s.protocol===`http:`?s.protocol=`ws:`:s.protocol===`https:`&&(s.protocol=`wss:`),e._url=s.href;let u=s.protocol===`wss:`,d=s.protocol===`ws+unix:`,m;if(s.protocol!==`ws:`&&!u&&!d?m=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`:d&&!s.pathname?m=`The URL's pathname is empty`:s.hash&&(m=`The URL contains a fragment identifier`),m){let t=SyntaxError(m);if(e._redirects===0)throw t;L(e,t);return}let h=u?443:80,g=c(16).toString(`base64`),_=u?i.request:a.request,y=new Set,x;if(o.createConnection=o.createConnection||(u?ee:R),o.defaultPort=o.defaultPort||h,o.port=s.port||h,o.host=s.hostname.startsWith(`[`)?s.hostname.slice(1,-1):s.hostname,o.headers={...o.headers,"Sec-WebSocket-Version":o.protocolVersion,"Sec-WebSocket-Key":g,Connection:`Upgrade`,Upgrade:`websocket`},o.path=s.pathname+s.search,o.timeout=o.handshakeTimeout,o.perMessageDeflate&&(x=new p({...o.perMessageDeflate,isServer:!1,maxPayload:o.maxPayload}),o.headers[`Sec-WebSocket-Extensions`]=O({[p.extensionName]:x.offer()})),n.length){for(let e of n){if(typeof e!=`string`||!P.test(e)||y.has(e))throw SyntaxError(`An invalid or duplicated subprotocol was specified`);y.add(e)}o.headers[`Sec-WebSocket-Protocol`]=n.join(`,`)}if(o.origin&&(o.protocolVersion<13?o.headers[`Sec-WebSocket-Origin`]=o.origin:o.headers.Origin=o.origin),(s.username||s.password)&&(o.auth=`${s.username}:${s.password}`),d){let e=o.path.split(`:`);o.socketPath=e[0],o.path=e[1]}let S;if(o.followRedirects){if(e._redirects===0){e._originalIpc=d,e._originalSecure=u,e._originalHostOrSocketPath=d?o.socketPath:s.host;let t=r&&r.headers;if(r={...r,headers:{}},t)for(let[e,n]of Object.entries(t))r.headers[e.toLowerCase()]=n}else if(e.listenerCount(`redirect`)===0){let t=d?e._originalIpc?o.socketPath===e._originalHostOrSocketPath:!1:!e._originalIpc&&s.host===e._originalHostOrSocketPath;(!t||e._originalSecure&&!u)&&(delete o.headers.authorization,delete o.headers.cookie,t||delete o.headers.host,o.auth=void 0)}o.auth&&!r.headers.authorization&&(r.headers.authorization=`Basic `+Buffer.from(o.auth).toString(`base64`)),S=e._req=_(o),e._redirects&&e.emit(`redirect`,e.url,S)}else S=e._req=_(o);o.timeout&&S.on(`timeout`,()=>{z(e,S,`Opening handshake has timed out`)}),S.on(`error`,t=>{S===null||S[j]||(S=e._req=null,L(e,t))}),S.on(`response`,i=>{let a=i.headers.location,s=i.statusCode;if(a&&o.followRedirects&&s>=300&&s<400){if(++e._redirects>o.maxRedirects){z(e,S,`Maximum redirects exceeded`);return}S.abort();let i;try{i=new f(a,t)}catch{L(e,SyntaxError(`Invalid URL: ${a}`));return}I(e,i,n,r)}else e.emit(`unexpected-response`,S,i)||z(e,S,`Unexpected server response: ${i.statusCode}`)}),S.on(`upgrade`,(t,n,r)=>{if(e.emit(`upgrade`,t),e.readyState!==F.CONNECTING)return;S=e._req=null;let i=t.headers.upgrade;if(i===void 0||i.toLowerCase()!==`websocket`){z(e,n,`Invalid Upgrade header`);return}let a=l(`sha1`).update(g+b).digest(`base64`);if(t.headers[`sec-websocket-accept`]!==a){z(e,n,`Invalid Sec-WebSocket-Accept header`);return}let s=t.headers[`sec-websocket-protocol`],c;if(s===void 0?y.size&&(c=`Server sent no subprotocol`):y.size?y.has(s)||(c=`Server sent an invalid subprotocol`):c=`Server sent a subprotocol but none was requested`,c){z(e,n,c);return}s&&(e._protocol=s);let u=t.headers[`sec-websocket-extensions`];if(u!==void 0){if(!x){z(e,n,`Server sent a Sec-WebSocket-Extensions header but no extension was requested`);return}let t;try{t=k(u)}catch{z(e,n,`Invalid Sec-WebSocket-Extensions header`);return}let r=Object.keys(t);if(r.length!==1||r[0]!==p.extensionName){z(e,n,`Server indicated an extension that was not requested`);return}try{x.accept(t[p.extensionName])}catch{z(e,n,`Invalid Sec-WebSocket-Extensions header`);return}e._extensions[p.extensionName]=x}e.setSocket(n,r,{allowSynchronousEvents:o.allowSynchronousEvents,generateMask:o.generateMask,maxBufferedChunks:o.maxBufferedChunks,maxFragments:o.maxFragments,maxPayload:o.maxPayload,skipUTF8Validation:o.skipUTF8Validation})}),o.finishRequest?o.finishRequest(S,e):S.end()}function L(e,t){e._readyState=F.CLOSING,e._errorEmitted=!0,e.emit(`error`,t),e.emitClose()}function R(e){return e.path=e.socketPath,o.connect(e)}function ee(e){return e.path=void 0,!e.servername&&e.servername!==``&&(e.servername=o.isIP(e.host)?``:e.host),s.connect(e)}function z(e,t,n){e._readyState=F.CLOSING;let r=Error(n);Error.captureStackTrace(r,z),t.setHeader?(t[j]=!0,t.abort(),t.socket&&!t.socket.destroyed&&t.socket.destroy(),process.nextTick(L,e,r)):(t.destroy(r),t.once(`error`,e.emit.bind(e,`error`)),t.once(`close`,e.emitClose.bind(e)))}function B(e,t,n){if(t){let n=g(t)?t.size:A(t).length;e._socket?e._sender._bufferedBytes+=n:e._bufferedAmount+=n}if(n){let t=Error(`WebSocket is not open: readyState ${e.readyState} (${N[e.readyState]})`);process.nextTick(n,t)}}function te(e,t){let n=this[w];n._closeFrameReceived=!0,n._closeMessage=t,n._closeCode=e,n._socket[w]!==void 0&&(n._socket.removeListener(`data`,G),process.nextTick(W,n._socket),e===1005?n.close():n.close(e,t))}function ne(){let e=this[w];e.isPaused||e._socket.resume()}function re(e){let t=this[w];t._socket[w]!==void 0&&(t._socket.removeListener(`data`,G),process.nextTick(W,t._socket),t.close(e[C])),t._errorEmitted||(t._errorEmitted=!0,t.emit(`error`,e))}function V(){this[w].emitClose()}function H(e,t){this[w].emit(`message`,e,t)}function U(e){let t=this[w];t._autoPong&&t.pong(e,!this._isServer,T),t.emit(`ping`,e)}function ie(e){this[w].emit(`pong`,e)}function W(e){e.resume()}function ae(e){let t=this[w];t.readyState!==F.CLOSED&&(t.readyState===F.OPEN&&(t._readyState=F.CLOSING,oe(t)),this._socket.end(),t._errorEmitted||(t._errorEmitted=!0,t.emit(`error`,e)))}function oe(e){e._closeTimer=setTimeout(e._socket.destroy.bind(e._socket),e._closeTimeout)}function se(){let e=this[w];if(this.removeListener(`close`,se),this.removeListener(`data`,G),this.removeListener(`end`,ce),e._readyState=F.CLOSING,!this._readableState.endEmitted&&!e._closeFrameReceived&&!e._receiver._writableState.errorEmitted&&this._readableState.length!==0){let t=this.read(this._readableState.length);e._receiver.write(t)}e._receiver.end(),this[w]=void 0,clearTimeout(e._closeTimer),e._receiver._writableState.finished||e._receiver._writableState.errorEmitted?e.emitClose():(e._receiver.on(`error`,V),e._receiver.on(`finish`,V))}function G(e){this[w]._receiver.write(e)||this.pause()}function ce(){let e=this[w];e._readyState=F.CLOSING,e._receiver.end(),this.end()}function K(){let e=this[w];this.removeListener(`error`,K),this.on(`error`,T),e&&(e._readyState=F.CLOSING,this.destroy())}})),_e=n(((e,n)=>{ge();let{Duplex:r}=t(`stream`);function i(e){e.emit(`close`)}function a(){!this.destroyed&&this._writableState.finished&&this.destroy()}function o(e){this.removeListener(`error`,o),this.destroy(),this.listenerCount(`error`)===0&&this.emit(`error`,e)}function s(e,t){let n=!0,s=new r({...t,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return e.on(`message`,function(t,n){let r=!n&&s._readableState.objectMode?t.toString():t;s.push(r)||e.pause()}),e.once(`error`,function(e){s.destroyed||(n=!1,s.destroy(e))}),e.once(`close`,function(){s.destroyed||s.push(null)}),s._destroy=function(t,r){if(e.readyState===e.CLOSED){r(t),process.nextTick(i,s);return}let a=!1;e.once(`error`,function(e){a=!0,r(e)}),e.once(`close`,function(){a||r(t),process.nextTick(i,s)}),n&&e.terminate()},s._final=function(t){if(e.readyState===e.CONNECTING){e.once(`open`,function(){s._final(t)});return}e._socket!==null&&(e._socket._writableState.finished?(t(),s._readableState.endEmitted&&s.destroy()):(e._socket.once(`finish`,function(){t()}),e.close()))},s._read=function(){e.isPaused&&e.resume()},s._write=function(t,n,r){if(e.readyState===e.CONNECTING){e.once(`open`,function(){s._write(t,n,r)});return}e.send(t,r)},s.on(`end`,a),s.on(`error`,o),s}n.exports=s})),ve=n(((e,t)=>{let{tokenChars:n}=Y();function r(e){let t=new Set,r=-1,i=-1,a=0;for(;a<e.length;a++){let o=e.charCodeAt(a);if(i===-1&&n[o]===1)r===-1&&(r=a);else if(a!==0&&(o===32||o===9))i===-1&&r!==-1&&(i=a);else if(o===44){if(r===-1)throw SyntaxError(`Unexpected character at index ${a}`);i===-1&&(i=a);let n=e.slice(r,i);if(t.has(n))throw SyntaxError(`The "${n}" subprotocol is duplicated`);t.add(n),r=i=-1}else throw SyntaxError(`Unexpected character at index ${a}`)}if(r===-1||i!==-1)throw SyntaxError(`Unexpected end of input`);let o=e.slice(r,a);if(t.has(o))throw SyntaxError(`The "${o}" subprotocol is duplicated`);return t.add(o),t}t.exports={parse:r}})),ye=n(((e,n)=>{let r=t(`events`),i=t(`http`),{Duplex:a}=t(`stream`),{createHash:o}=t(`crypto`),s=Z(),c=J(),l=ve(),u=ge(),{CLOSE_TIMEOUT:d,GUID:f,kWebSocket:p}=q(),m=/^[+/0-9A-Za-z]{22}==$/;n.exports=class extends r{constructor(e,t){if(super(),e={allowSynchronousEvents:!0,autoPong:!0,maxBufferedChunks:1048576,maxFragments:131072,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:d,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:u,...e},e.port==null&&!e.server&&!e.noServer||e.port!=null&&(e.server||e.noServer)||e.server&&e.noServer)throw TypeError(`One and only one of the "port", "server", or "noServer" options must be specified`);if(e.port==null?e.server&&(this._server=e.server):(this._server=i.createServer((e,t)=>{let n=i.STATUS_CODES[426];t.writeHead(426,{"Content-Length":n.length,"Content-Type":`text/plain`}),t.end(n)}),this._server.listen(e.port,e.host,e.backlog,t)),this._server){let e=this.emit.bind(this,`connection`);this._removeListeners=h(this._server,{listening:this.emit.bind(this,`listening`),error:this.emit.bind(this,`error`),upgrade:(t,n,r)=>{this.handleUpgrade(t,n,r,e)}})}e.perMessageDeflate===!0&&(e.perMessageDeflate={}),e.clientTracking&&(this.clients=new Set,this._shouldEmitClose=!1),this.options=e,this._state=0}address(){if(this.options.noServer)throw Error(`The server is operating in "noServer" mode`);return this._server?this._server.address():null}close(e){if(this._state===2){e&&this.once(`close`,()=>{e(Error(`The server is not running`))}),process.nextTick(g,this);return}if(e&&this.once(`close`,e),this._state!==1){if(this._state=1,this.options.noServer||this.options.server)this._server&&(this._removeListeners(),this._removeListeners=this._server=null),this.clients&&this.clients.size?this._shouldEmitClose=!0:process.nextTick(g,this);else{let e=this._server;this._removeListeners(),this._removeListeners=this._server=null,e.close(()=>{g(this)})}}}shouldHandle(e){if(this.options.path){let t=e.url.indexOf(`?`);if((t===-1?e.url:e.url.slice(0,t))!==this.options.path)return!1}return!0}handleUpgrade(e,t,n,r){t.on(`error`,_);let i=e.headers[`sec-websocket-key`],a=e.headers.upgrade,o=+e.headers[`sec-websocket-version`];if(e.method!==`GET`){y(this,e,t,405,`Invalid HTTP method`);return}if(a===void 0||a.toLowerCase()!==`websocket`){y(this,e,t,400,`Invalid Upgrade header`);return}if(i===void 0||!m.test(i)){y(this,e,t,400,`Missing or invalid Sec-WebSocket-Key header`);return}if(o!==13&&o!==8){y(this,e,t,400,`Missing or invalid Sec-WebSocket-Version header`,{"Sec-WebSocket-Version":`13, 8`});return}if(!this.shouldHandle(e)){v(t,400);return}let u=e.headers[`sec-websocket-protocol`],d=new Set;if(u!==void 0)try{d=l.parse(u)}catch{y(this,e,t,400,`Invalid Sec-WebSocket-Protocol header`);return}let f=e.headers[`sec-websocket-extensions`],p={};if(this.options.perMessageDeflate&&f!==void 0){let n=new c({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let e=s.parse(f);e[c.extensionName]&&(n.accept(e[c.extensionName]),p[c.extensionName]=n)}catch{y(this,e,t,400,`Invalid or unacceptable Sec-WebSocket-Extensions header`);return}}if(this.options.verifyClient){let a={origin:e.headers[`${o===8?`sec-websocket-origin`:`origin`}`],secure:!!(e.socket.authorized||e.socket.encrypted),req:e};if(this.options.verifyClient.length===2){this.options.verifyClient(a,(a,o,s,c)=>{if(!a)return v(t,o||401,s,c);this.completeUpgrade(p,i,d,e,t,n,r)});return}if(!this.options.verifyClient(a))return v(t,401)}this.completeUpgrade(p,i,d,e,t,n,r)}completeUpgrade(e,t,n,r,i,a,l){if(!i.readable||!i.writable)return i.destroy();if(i[p])throw Error(`server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration`);if(this._state>0)return v(i,503);let u=[`HTTP/1.1 101 Switching Protocols`,`Upgrade: websocket`,`Connection: Upgrade`,`Sec-WebSocket-Accept: ${o(`sha1`).update(t+f).digest(`base64`)}`],d=new this.options.WebSocket(null,void 0,this.options);if(n.size){let e=this.options.handleProtocols?this.options.handleProtocols(n,r):n.values().next().value;e&&(u.push(`Sec-WebSocket-Protocol: ${e}`),d._protocol=e)}if(e[c.extensionName]){let t=e[c.extensionName].params,n=s.format({[c.extensionName]:[t]});u.push(`Sec-WebSocket-Extensions: ${n}`),d._extensions=e}this.emit(`headers`,u,r),i.write(u.concat(`\r
|
|
9
|
+
`),f=d.shift();if(!f)return e.destroy(),r(Error(`No header received from proxy CONNECT response`));let p=f.split(` `),m=+p[1],h=p.slice(2).join(` `),g={};for(let t of d){if(!t)continue;let n=t.indexOf(`:`);if(n===-1)return e.destroy(),r(Error(`Invalid header from proxy CONNECT response: "${t}"`));let i=t.slice(0,n).toLowerCase(),a=t.slice(n+1).trimStart(),o=g[i];typeof o==`string`?g[i]=[o,a]:Array.isArray(o)?o.push(a):g[i]=a}n(`got proxy server response: %o %o`,f,g),s(),t({connect:{statusCode:m,statusText:h,headers:g},buffered:l})}e.on(`error`,l),e.on(`end`,c),o()})}e.parseProxyResponse=r})),le=n((e=>{var n=e&&e.__createBinding||(Object.create?(function(e,t,n,r){r===void 0&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);(!i||(`get`in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}):(function(e,t,n,r){r===void 0&&(r=n),e[r]=t[n]})),r=e&&e.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),i=e&&e.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var i in e)i!=="default"&&Object.prototype.hasOwnProperty.call(e,i)&&n(t,e,i);return r(t,e),t},a=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,"__esModule",{value:!0}),e.HttpsProxyAgent=void 0;let o=i(t(`net`)),s=i(t(`tls`)),c=a(t(`assert`)),l=a(U()),u=ce(),d=t(`url`),f=W(),p=(0,l.default)(`https-proxy-agent`),m=e=>e.servername===void 0&&e.host&&!o.isIP(e.host)?{...e,servername:e.host}:e;var h=class extends u.Agent{constructor(e,t){super(t),this.options={path:void 0},this.proxy=typeof e==`string`?new d.URL(e):e,this.proxyHeaders=t?.headers??{},p(`Creating new HttpsProxyAgent instance: %o`,this.proxy.href);let n=(this.proxy.hostname||this.proxy.host).replace(/^\[|\]$/g,``),r=this.proxy.port?parseInt(this.proxy.port,10):this.proxy.protocol===`https:`?443:80;this.connectOpts={ALPNProtocols:[`http/1.1`],...t?_(t,`headers`):null,host:n,port:r}}async connect(e,t){let{proxy:n}=this;if(!t.host)throw TypeError(`No "host" provided`);let r;n.protocol===`https:`?(p("Creating `tls.Socket`: %o",this.connectOpts),r=s.connect(m(this.connectOpts))):(p("Creating `net.Socket`: %o",this.connectOpts),r=o.connect(this.connectOpts));let i=typeof this.proxyHeaders==`function`?this.proxyHeaders():{...this.proxyHeaders},a=o.isIPv6(t.host)?`[${t.host}]`:t.host,l=`CONNECT ${a}:${t.port} HTTP/1.1\r\n`;if(n.username||n.password){let e=`${decodeURIComponent(n.username)}:${decodeURIComponent(n.password)}`;i[`Proxy-Authorization`]=`Basic ${Buffer.from(e).toString(`base64`)}`}i.Host=`${a}:${t.port}`,i[`Proxy-Connection`]||=this.keepAlive?`Keep-Alive`:`close`;for(let e of Object.keys(i))l+=`${e}: ${i[e]}\r\n`;let u=(0,f.parseProxyResponse)(r);r.write(`${l}\r\n`);let{connect:d,buffered:h}=await u;if(e.emit(`proxyConnect`,d),this.emit(`proxyConnect`,d,e),d.statusCode===200)return e.once(`socket`,g),t.secureEndpoint?(p(`Upgrading socket connection to TLS`),s.connect({..._(m(t),`host`,`path`,`port`),socket:r})):r;r.destroy();let v=new o.Socket({writable:!1});return v.readable=!0,e.once(`socket`,e=>{p(`Replaying proxy buffer for failed request`),(0,c.default)(e.listenerCount(`data`)>0),e.push(h),e.push(null)}),v}};h.protocols=[`http`,`https`],e.HttpsProxyAgent=h;function g(e){e.resume()}function _(e,...t){let n={},r;for(r in e)t.includes(r)||(n[r]=e[r]);return n}}))(),ue={ftp:21,gopher:70,http:80,https:443,ws:80,wss:443};function de(e){try{return new URL(e)}catch{return null}}function fe(e){var t=(typeof e==`string`?de(e):e)||{},n=t.protocol,r=t.host,i=t.port;if(typeof r!=`string`||!r||typeof n!=`string`||(n=n.split(`:`,1)[0],r=r.replace(/:\d*$/,``),i=parseInt(i)||ue[n]||0,!pe(r,i)))return``;var a=me(n+`_proxy`)||me(`all_proxy`);return a&&a.indexOf(`://`)===-1&&(a=n+`://`+a),a}function pe(e,t){var n=me(`no_proxy`).toLowerCase();return!n||n!==`*`&&n.split(/[,\s]/).every(function(n){if(!n)return!0;var r=n.match(/^(.+):(\d+)$/),i=r?r[1]:n,a=r?parseInt(r[2]):0;return a&&a!==t?!0:/^[.*]/.test(i)?(i.charAt(0)===`*`&&(i=i.slice(1)),!e.endsWith(i)):e!==i})}function me(e){return process.env[e.toLowerCase()]||process.env[e.toUpperCase()]||``}const he={headersTimeout:36e5,bodyTimeout:36e5},ge=65536,G=new class{constructor(){this.websocketAgents=new Map,this.fetch=async(e,t)=>this.hasProxyEnv()?fetch(e,{...t??{},dispatcher:this.getEnvHttpProxyAgent()}):fetch(e,t),this.fetchLongRequest=async(e,t)=>(this.longRequestDispatcher??=new E.EnvHttpProxyAgent(he),fetch(e,{...t??{},dispatcher:this.longRequestDispatcher}))}getWebSocketAgent(e){if(!this.hasProxyEnv())return;let t=fe(this.getWebSocketProxyLookupUrl(e));if(!t)return;let n=this.websocketAgents.get(t);if(!n){let e=new le.HttpsProxyAgent(t);this.websocketAgents.set(t,e),n=e}return n}connectTcp(e){let t=e.proxyLookupHost??e.host,n=fe(`${e.proxyLookupProtocol}//${ye(t,e.port)}`);return n?ve(n,e):_e(e)}getEnvHttpProxyAgent(){return this.envHttpProxyAgent??=new E.EnvHttpProxyAgent,this.envHttpProxyAgent}hasProxyEnv(){if(typeof process>`u`||!process.versions?.node)return!1;let e=process.env;return!!(e.http_proxy||e.HTTP_PROXY||e.https_proxy||e.HTTPS_PROXY)}getWebSocketProxyLookupUrl(e){let t=new URL(e);return t.protocol===`ws:`?t.protocol=`http:`:t.protocol===`wss:`&&(t.protocol=`https:`),t.toString()}};function _e(e){let t=Date.now();return new Promise((n,r)=>{let i=!1,a=m.createConnection({host:e.host,port:e.port,allowHalfOpen:!0}),o=setTimeout(()=>{c(K(`connection to ${ye(e.host,e.port)} timed out`,`ETIMEDOUT`))},e.timeoutMs);o.unref();let s=()=>{clearTimeout(o),a.removeListener(`connect`,u),a.removeListener(`error`,c),e.signal?.removeEventListener(`abort`,l)},c=e=>{i||(i=!0,s(),a.destroy(),r(e))},l=()=>c(K(`TCP connection cancelled`,`ECANCELED`)),u=()=>{i||(i=!0,a.pause(),s(),n({socket:a,connectMs:Date.now()-t,...a.remoteAddress===void 0?{}:{remoteAddress:a.remoteAddress}}))};a.once(`connect`,u),a.once(`error`,c),e.signal?.aborted?l():e.signal?.addEventListener(`abort`,l,{once:!0})})}function ve(e,t){let n=Date.now();return new Promise((r,i)=>{let a=!1,o=Buffer.alloc(0),s;try{s=new URL(e)}catch{i(K(`invalid proxy URL: ${e}`,`EPROXY`));return}if(s.protocol!==`http:`&&s.protocol!==`https:`){i(K(`unsupported proxy protocol ${s.protocol}`,`EPROXY`));return}let c=s.port?Number(s.port):s.protocol===`https:`?443:80,l=be(s.hostname),u=s.protocol===`https:`?h.connect({host:l,port:c,rejectUnauthorized:!0,...m.isIP(l)?{}:{servername:l},ALPNProtocols:[`http/1.1`]}):m.createConnection({host:l,port:c,allowHalfOpen:!0});u.allowHalfOpen=!0;let d=s.protocol===`https:`?`secureConnect`:`connect`,f=setTimeout(()=>{g(K(`proxy connection to ${ye(t.host,t.port)} timed out`,`ETIMEDOUT`))},t.timeoutMs);f.unref();let p=()=>{clearTimeout(f),u.removeListener(d,y),u.removeListener(`data`,b),u.removeListener(`end`,v),u.removeListener(`close`,v),u.removeListener(`error`,g),t.signal?.removeEventListener(`abort`,_)},g=e=>{a||(a=!0,p(),u.destroy(),i(e))},_=()=>g(K(`proxy connection cancelled`,`ECANCELED`)),v=()=>g(K(`proxy closed before completing CONNECT`,`ECONNRESET`)),y=()=>{let e=ye(t.host,t.port),n=[`CONNECT ${e} HTTP/1.1`,`Host: ${e}`,`Proxy-Connection: Keep-Alive`];if(s.username||s.password){let e=xe(s.username),t=xe(s.password);n.push(`Proxy-Authorization: Basic ${Buffer.from(`${e}:${t}`,`utf8`).toString(`base64`)}`)}u.write(`${n.join(`\r
|
|
10
|
+
`)}\r\n\r\n`)},b=e=>{o=Buffer.concat([o,e]);let i=o.indexOf(`\r
|
|
11
|
+
\r
|
|
12
|
+
`);if(i<0){o.length>ge&&g(K(`proxy CONNECT response headers exceeded 65536 bytes`,`EPROXY`));return}if(i+4>ge){g(K(`proxy CONNECT response headers exceeded 65536 bytes`,`EPROXY`));return}let s=o.indexOf(`\r
|
|
13
|
+
`),c=o.subarray(0,s<0?i:s).toString(`latin1`),l=/^HTTP\/1\.[01] ([0-9]{3})(?: |$)/.exec(c);if(!l){g(K(`invalid proxy CONNECT response: ${c}`,`EPROXY`));return}let d=Number(l[1]);if(d<200||d>=300){g(K(`proxy CONNECT failed with status ${d}`,d===407?`EPROXYAUTH`:`EPROXYCONNECT`));return}a=!0,u.pause(),p();let f=o.subarray(i+4);f.length>0&&u.unshift(f),r({socket:u,connectMs:Date.now()-n,remoteAddress:t.host})};u.once(d,y),u.on(`data`,b),u.once(`end`,v),u.once(`close`,v),u.once(`error`,g),t.signal?.aborted?_():t.signal?.addEventListener(`abort`,_,{once:!0})})}function ye(e,t){return`${m.isIP(e)===6?`[${e}]`:e}:${t}`}function be(e){return e.startsWith(`[`)&&e.endsWith(`]`)?e.slice(1,-1):e}function xe(e){try{return decodeURIComponent(e)}catch{return e}}function K(e,t){return Object.assign(Error(e),{code:t})}var Se=n((e=>{Object.defineProperty(e,"__esModule",{value:!0});var t=class extends Error{constructor(e,t){super(e),this.name=`ParseError`,this.type=t.type,this.field=t.field,this.value=t.value,this.line=t.line}};function n(e){}function r(e){if(typeof e==`function`)throw TypeError("`config` must be an object, got a function instead. Did you mean `createParser({onEvent: fn})`?");let{onEvent:r=n,onError:o=n,onRetry:s=n,onComment:c,maxBufferSize:l}=e,u=[],d=0,f=!0,p,m=``,h=0,g,_=!1;function v(e){if(_)throw Error("Cannot feed parser: it was terminated after exceeding the configured max buffer size. Call `reset()` to resume parsing.");if(f&&(f=!1,e.charCodeAt(0)===239&&e.charCodeAt(1)===187&&e.charCodeAt(2)===191&&(e=e.slice(3))),u.length===0){let t=b(e);t!==``&&(u.push(t),d=t.length),y();return}if(e.indexOf(`
|
|
14
|
+
`)===-1&&e.indexOf(`\r`)===-1){u.push(e),d+=e.length,y();return}u.push(e);let t=u.join(``);u.length=0,d=0;let n=b(t);n!==``&&(u.push(n),d=n.length),y()}function y(){l!==void 0&&(d+m.length<=l||(_=!0,u.length=0,d=0,p=void 0,m=``,h=0,g=void 0,o(new t(`Buffered data exceeded max buffer size of ${l} characters`,{type:`max-buffer-size-exceeded`}))))}function b(e){let t=0;if(e.indexOf(`\r`)===-1){let n=e.indexOf(`
|
|
15
|
+
`,t);for(;n!==-1;){if(t===n){h>0&&r({id:p,event:g,data:m}),p=void 0,m=``,h=0,g=void 0,t=n+1,n=e.indexOf(`
|
|
16
|
+
`,t);continue}let o=e.charCodeAt(t);if(i(e,t,o)){let i=e.charCodeAt(t+5)===32?t+6:t+5,a=e.slice(i,n);if(h===0&&e.charCodeAt(n+1)===10){r({id:p,event:g,data:a}),p=void 0,m=``,g=void 0,t=n+2,n=e.indexOf(`
|
|
17
|
+
`,t);continue}m=h===0?a:`${m}
|
|
18
|
+
${a}`,h++}else a(e,t,o)?g=e.slice(e.charCodeAt(t+6)===32?t+7:t+6,n)||void 0:x(e,t,n);t=n+1,n=e.indexOf(`
|
|
19
|
+
`,t)}return e.slice(t)}for(;t<e.length;){let n=e.indexOf(`\r`,t),r=e.indexOf(`
|
|
20
|
+
`,t),i=-1;if(n!==-1&&r!==-1?i=n<r?n:r:n===-1?r!==-1&&(i=r):i=n===e.length-1?-1:n,i===-1)break;x(e,t,i),t=i+1,e.charCodeAt(t-1)===13&&e.charCodeAt(t)===10&&t++}return e.slice(t)}function x(e,t,n){if(t===n){C();return}let r=e.charCodeAt(t);if(i(e,t,r)){let r=e.charCodeAt(t+5)===32?t+6:t+5,i=e.slice(r,n);m=h===0?i:`${m}
|
|
21
|
+
${i}`,h++;return}if(a(e,t,r)){g=e.slice(e.charCodeAt(t+6)===32?t+7:t+6,n)||void 0;return}if(r===105&&e.charCodeAt(t+1)===100&&e.charCodeAt(t+2)===58){let r=e.slice(e.charCodeAt(t+3)===32?t+4:t+3,n);r.includes(`\0`)||(p=r);return}if(r===58){if(c){let r=e.slice(t,n);c(r.slice(e.charCodeAt(t+1)===32?2:1))}return}let o=e.slice(t,n),s=o.indexOf(`:`);if(s===-1){S(o,``,o);return}let l=o.slice(0,s),u=o.charCodeAt(s+1)===32?2:1;S(l,o.slice(s+u),o)}function S(e,n,r){switch(e){case`event`:g=n||void 0;break;case`data`:m=h===0?n:`${m}
|
|
22
|
+
${n}`,h++;break;case`id`:n.includes(`\0`)||(p=n);break;case`retry`:/^\d+$/.test(n)?s(parseInt(n,10)):o(new t(`Invalid \`retry\` value: "${n}"`,{type:`invalid-retry`,value:n,line:r}));break;default:o(new t(`Unknown field "${e.length>20?`${e.slice(0,20)}\u2026`:e}"`,{type:`unknown-field`,field:e,value:n,line:r}))}}function C(){h>0&&r({id:p,event:g,data:m}),p=void 0,m=``,h=0,g=void 0}function w(e={}){if(e.consume&&u.length>0){let e=u.join(``);x(e,0,e.length)}f=!0,p=void 0,m=``,h=0,g=void 0,u.length=0,d=0,_=!1}return{feed:v,reset:w}}function i(e,t,n){return n===100&&e.charCodeAt(t+1)===97&&e.charCodeAt(t+2)===116&&e.charCodeAt(t+3)===97&&e.charCodeAt(t+4)===58}function a(e,t,n){return n===101&&e.charCodeAt(t+1)===118&&e.charCodeAt(t+2)===101&&e.charCodeAt(t+3)===110&&e.charCodeAt(t+4)===116&&e.charCodeAt(t+5)===58}e.ParseError=t,e.createParser=r}));const Ce=e(n((e=>{Object.defineProperty(e,"__esModule",{value:!0});var n=t(`node:stream`),r=Se();let i=`connecting`,a=`open`,o=`closed`,s=()=>{};function c(e,{getStream:t}){let n=typeof e==`string`||e instanceof URL?{url:e}:e,{onMessage:c,onComment:u=s,onConnect:d=s,onDisconnect:f=s,onScheduleReconnect:p=s}=n,{fetch:m,url:h,initialLastEventId:g}=l(n),_={...n.headers},v=[],y=c?[c]:[],b=e=>y.forEach(t=>t(e)),x=r.createParser({onEvent:P,onRetry:F,onComment:u}),S,C=h.toString(),w=new AbortController,T=g,E=2e3,D,O=o;return k(),{close:A,connect:k,[Symbol.iterator]:()=>{throw Error("EventSource does not support synchronous iteration. Use `for await` instead.")},[Symbol.asyncIterator]:j,get lastEventId(){return T},get url(){return C},get readyState(){return O}};function k(){S||=(O=i,w=new AbortController,m(h,I()).then(N).catch(e=>{S=null,!(e.name===`AbortError`||e.type===`aborted`||w.signal.aborted)&&M()}))}function A(){O=o,w.abort(),x.reset(),clearTimeout(D),v.forEach(e=>e())}function j(){let e=[],t=[];function n(){return new Promise(n=>{let r=t.shift();r?n({value:r,done:!1}):e.push(n)})}let r=function(n){let r=e.shift();r?r({value:n,done:!1}):t.push(n)};function i(){for(y.splice(y.indexOf(r),1);e.shift(););for(;t.shift(););}function a(){let t=e.shift();t&&(t({done:!0,value:void 0}),i())}return v.push(a),y.push(r),{next(){return O===o?this.return():n()},return(){return i(),Promise.resolve({done:!0,value:void 0})},throw(e){return i(),Promise.reject(e)},[Symbol.asyncIterator](){return this}}}function M(){p({delay:E}),!w.signal.aborted&&(O=i,D=setTimeout(k,E))}async function N(e){d(),x.reset();let{body:n,redirected:r,status:i}=e;if(i===204){f(),A();return}if(!n)throw Error(`Missing response body`);r&&(C=e.url);let o=t(n),s=new TextDecoder,c=o.getReader(),l=!0;O=a;do{let{done:e,value:t}=await c.read();t&&x.feed(s.decode(t,{stream:!e})),e&&(l=!1,S=null,x.reset(),M(),f())}while(l)}function P(e){typeof e.id==`string`&&(T=e.id),b(e)}function F(e){E=e}function I(){let{mode:e,credentials:t,body:r,method:i,redirect:a,referrer:o,referrerPolicy:s}=n;return{mode:e,credentials:t,body:r,method:i,redirect:a,referrer:o,referrerPolicy:s,headers:{Accept:`text/event-stream`,..._,...T?{"Last-Event-ID":T}:void 0},cache:`no-store`,signal:w.signal}}}function l(e){let t=e.fetch||globalThis.fetch;if(!u(t))throw Error(`No fetch implementation provided, and one was not found on the global object.`);if(typeof AbortController!=`function`)throw Error(`Missing AbortController implementation`);let{url:n,initialLastEventId:r}=e;if(typeof n!=`string`&&!(n instanceof URL))throw Error(`Invalid URL provided - must be string or URL instance`);if(typeof r!=`string`&&r!==void 0)throw Error(`Invalid initialLastEventId provided - must be string or undefined`);return{fetch:t,url:n,initialLastEventId:r}}function u(e){return typeof e==`function`}let d={getStream:p};function f(e){return c(e,d)}function p(e){if(`getReader`in e)return e;if(typeof e.pipe!=`function`||typeof e.on!=`function`)throw Error(`Invalid response body, expected a web or node.js stream`);if(typeof n.Readable.toWeb!=`function`)throw Error("Node.js 18 or higher required (`Readable.toWeb()` not defined)");return n.Readable.toWeb(n.Readable.from(e))}e.CLOSED=o,e.CONNECTING=i,e.OPEN=a,e.createEventSource=f}))(),1).createEventSource;function we(e,t){return async(n,r)=>{try{return await e(n,r)}catch(e){throw t(e),e}}}const Te={healthyConnectionMs:15e3,giveUpAfterMs:3e5};var Ee=class extends Error{},De=class extends Error{},Oe=class{constructor(){this.dataListeners=[],this.closeListeners=[],this.closed=!1}on(e,t){return e===`data`?this.dataListeners.push(t):e===`close`&&this.closeListeners.push(t),this}emit(e,t){if(e===`data`&&typeof t==`string`)for(let e of this.dataListeners)e(t);else if(e===`close`&&!this.closed){this.closed=!0;for(let e of this.closeListeners)e()}}},ke=class{constructor(e,t){this.command=new Oe,this.stdout=new Oe,this.stderr=new Oe,this.exitListeners=[],this.abortController=new AbortController,this.sseConnection=null,this.killed=!1,this.streamDeadSince=0,this.detached=!1,this.appStoreEvent=null,this.playstoreEvent=null,this.xctestCases=[],this.xctestSummary=null,this.lastSeenEventId=-1,this.options=t,this.log=t.log??(()=>{}),this.startedPromise=new Promise((e,t)=>{this.resolveStarted=e,this.rejectStarted=t}),this.startedPromise.catch(()=>{}),this.resultPromise=e instanceof Promise?e.then(e=>this.run(e)):this.run(e),this.resultPromise.catch(e=>this.rejectStarted(e))}then(e,t){return this.resultPromise.then(e,t)}catch(e){return this.resultPromise.catch(e)}finally(e){return this.resultPromise.finally(e)}on(e,t){return e===`exit`&&this.exitListeners.push(t),this}detach(){return this.detached=!0,this.resultPromise.catch(()=>{}),this.startedPromise}async kill(){if(this.killed=!0,this.abortController.abort(),this.sseConnection&&=(this.sseConnection.close(),null),!this.execId){this.log(`warn`,`Failed to cancel execution: execId is not set`);return}try{await G.fetch(`${this.options.apiUrl}/exec/${this.execId}/cancel`,{method:`POST`,headers:{Authorization:`Bearer ${this.options.token}`}}),this.log(`info`,`Execution cancelled`)}catch(e){this.log(`warn`,`Failed to cancel execution: ${e}`)}}async run(e){let{log:t}=this,{apiUrl:n,token:r}=this.options,i={...e};`additionalMetadata`in i&&delete i.additionalMetadata;let a;try{a=await G.fetch(`${n}/exec`,{method:`POST`,headers:{"Content-Type":`application/json`,Authorization:`Bearer ${r}`},body:JSON.stringify(i),signal:this.abortController.signal})}catch(e){if(this.killed){this.rejectStarted(Error(`Execution cancelled before it started`)),this.command.emit(`close`),this.stdout.emit(`close`),this.stderr.emit(`close`);for(let e of this.exitListeners)e(-1);return{exitCode:-1,execId:``,status:`CANCELLED`}}throw e}if(!a.ok){let e=await a.text(),t=e;try{t=JSON.parse(e).message||e}catch{}throw Error(`exec failed: ${a.status} ${t}`)}let o=await a.json();if(this.execId=o.execId,t(`debug`,`Execution started: ${this.execId}`),this.resolveStarted(this.execId),this.detached)return this.command.emit(`close`),this.stdout.emit(`close`),this.stderr.emit(`close`),new Promise(()=>{});let s=`${n}/exec/${this.execId}/events`,c=36e5;e.command===`xcodebuild`&&e.testflight&&(c+=(Math.max(0,e.testflight.waitTimeoutSeconds??0)+900)*1e3),e.command===`xcodebuild`&&e.xcodebuild?.action===`build-for-testing`&&(c+=72e5),e.command===`run`&&(c=(Math.max(1,e.timeoutSeconds??3600)+60)*1e3);let l,u=!1,d,f;try{l=await Promise.race([this.connectSSE(s),new Promise((e,t)=>{f=setTimeout(()=>t(Error(`SSE completion timeout`)),c)})])}catch(e){if(this.killed)t(`debug`,`Execution killed`),l=-1;else{let n=e instanceof Error?e.message:String(e),r=this.streamDeadSince>0?Date.now()-this.streamDeadSince:0,i=e instanceof De?`stream-closed`:e instanceof Ee?`stream-lost`:`timeout`;i===`timeout`&&r>0&&(i=`stream-lost`,n=`the completion budget expired while the event stream had already been failing for ${Math.round(r/1e3)}s; the execution may no longer exist (instance deleted or record expired)`),d={reason:i,message:n},t(`warn`,n),l=1,u=!0}}finally{clearTimeout(f),this.sseConnection&&=(this.sseConnection.close(),null)}this.command.emit(`close`),this.stdout.emit(`close`),this.stderr.emit(`close`);for(let e of this.exitListeners)e(l);let p=l===0?`SUCCEEDED`:l===-1?`CANCELLED`:`FAILED`,m={exitCode:l,execId:this.execId,status:p,...`additionalMetadata`in e?e.additionalMetadata??{}:{},...this.appStoreEvent?{appstore:this.appStoreEvent}:{},...this.playstoreEvent?{playstore:this.playstoreEvent}:{},...this.xctestCases.length>0||this.xctestSummary?{xctest:{cases:this.xctestCases,...this.xctestSummary?{summary:this.xctestSummary}:{}}}:{},...u?{timedOut:u}:{},...d?{incomplete:d}:{}};return this.log(`debug`,`Execution finished: ${m.status} (exit ${m.exitCode})`),m}connectSSE(e){return new Promise((t,n)=>{let r=this.abortController.signal;if(r.aborted){n(Error(`killed`));return}let i=!1,a=0,o=0,s=0,c=!1,l=!1,u,d=()=>{h.close(),r.removeEventListener(`abort`,m)},f=e=>{i||(i=!0,d(),t(e))},p=e=>{i||(i=!0,d(),n(e))},m=()=>p(Error(`killed`)),h=Ce({url:e,fetch:we(async(t,n)=>{let r=await G.fetch(t,n);return r.status===204?p(new De(`event stream to ${e} was closed by the server (HTTP 204)`)):r.ok||(u=Error(`server answered HTTP ${r.status}`)),l=r.ok,r},e=>{u=e instanceof Error?e:Error(String(e))}),headers:{Authorization:`Bearer ${this.options.token}`},onConnect:()=>{a=Date.now()},onComment:()=>{c=!0},onScheduleReconnect:()=>{if(i||this.killed)return;let t=Date.now(),n=performance.now(),r=a>0?t-a:0;a=0,this.streamDeadSince>0&&o>0&&t-o-(n-s)>3e4&&(this.streamDeadSince=t),o=t,s=n;let d=c||l&&r>=Te.healthyConnectionMs;if(c=!1,l=!1,d){this.streamDeadSince=0,u=void 0;return}if(this.streamDeadSince===0){this.streamDeadSince=t,this.log(`warn`,`SSE disconnected; reconnecting`);return}if(t-this.streamDeadSince>=Te.giveUpAfterMs){let n=Math.round((t-this.streamDeadSince)/1e3),r=u?`; last error: ${u.message}`:``;p(new Ee(`event stream to ${e} kept failing for ${n}s without delivering events${r}; the execution may no longer exist (instance deleted or record expired)`))}},onMessage:e=>{this.streamDeadSince=0,c=!0,u=void 0;let t=e.id===void 0?NaN:parseInt(e.id,10);if(!Number.isNaN(t)){if(t<=this.lastSeenEventId)return;this.lastSeenEventId=t}let n=typeof e.data==`string`?e.data:String(e.data??``),r=e.event;if(r===`command`)this.command.emit(`data`,n);else if(r===`stdout`)this.stdout.emit(`data`,n);else if(r===`stderr`)this.stderr.emit(`data`,n);else if(r===`testflight`)try{this.appStoreEvent=JSON.parse(n)}catch{this.appStoreEvent={state:`unknown`},this.log(`warn`,`SSE testflight event has invalid data: ${n}`)}else if(r===`playstore`)try{this.playstoreEvent=JSON.parse(n)}catch{this.playstoreEvent={state:`unknown`},this.log(`warn`,`SSE playstore event has invalid data: ${n}`)}else if(r===`xctest`){let e;try{let t=JSON.parse(n);t?.type===`case`?(this.xctestCases.push(t),e=t):t?.type===`summary`?(this.xctestSummary=t,e=t):this.log(`debug`,`SSE xctest event of unknown type ignored: ${n}`)}catch{this.log(`warn`,`SSE xctest event has invalid data: ${n}`)}if(e)try{this.options.onXctestEvent?.(e)}catch(e){this.log(`warn`,`onXctestEvent callback threw: ${String(e)}`)}}else if(r===`exitCode`){let e=parseInt(n,10);if(Number.isNaN(e)){this.log(`warn`,`SSE exitCode event has invalid data: ${n}`);return}this.log(`debug`,`Execution completed via SSE: exitCode=${e}`),f(e)}}});this.sseConnection=h,r.addEventListener(`abort`,m,{once:!0})})}};function Ae(e,t){return new ke(e,t)}const je=(e,t)=>{};async function Me(e){let t=e.log??je,n=e.rootPath;if(!c.existsSync(n))throw Error(`watchFolderTree root does not exist: ${n}`);let r=c.watch(n,{recursive:!0},(t,n)=>{if(!n)return;let r=n.split(b.sep).join(`/`);e.ignoreFn(r)||e.onChange(r?`change:${r}`:`change`)});return t(`debug`,`watchFolderTree(recursive): ${n}`),{close:()=>r.close()}}function Ne(e,t,n,r){let i=`${e} failed: ${t}${n?` ${n}`:``}`;return t===404?new L(404,{message:i},void 0,r):Object.assign(Error(i),{status:t,body:n})}function Pe(e,t){return e instanceof Error&&e.status===t}const Fe=67108864,Ie=(e,t)=>{};function q(){return Date.now()}function Le(e){return e<1e3?`${e.toFixed(0)}ms`:`${(e/1e3).toFixed(2)}s`}function Re(e){if(e<1024)return`${e}B`;let t=e/1024;if(t<1024)return`${t.toFixed(1)}KiB`;let n=t/1024;return n<1024?`${n.toFixed(1)}MiB`:`${(n/1024).toFixed(2)}GiB`}function ze(e){return`${e}-${Date.now()}-${Math.random().toString(36).slice(2)}`}function Be(e){let t=e;return t?.code===`ENOENT`||t?.cause?.code===`ENOENT`}function Ve(){let e=g.cpus()?.length??1;return Math.min(4,Math.max(1,e-1))}async function He(e,t,n){let r=Array(e.length),i=0,a=Array(Math.min(t,e.length)).fill(0).map(async()=>{for(;;){let t=i++;if(t>=e.length)return;let a=e[t];r[t]=await n(a)}});return await Promise.all(a),r}function Ue(e){return`${e}/sync`}function We(e){let t=Buffer.allocUnsafe(4);return t.writeUInt32BE(e>>>0,0),t}async function Ge(e,t,n,r){let i=Ue(e.apiUrl),a={"Content-Type":`application/octet-stream`,Authorization:`Bearer ${e.token}`},o=Buffer.from(JSON.stringify(t),`utf-8`),s=Buffer.concat([We(o.length),o]);async function*u(){yield s;for(let e of n){let t=await c.promises.open(e.filePath,`r`);try{let e=await t.stat(),n=0;for(;n<e.size;){let r=Math.min(262144,e.size-n),i=Buffer.allocUnsafe(r),{bytesRead:a}=await t.read(i,0,r,n);if(a<=0)break;n+=a,yield i.subarray(0,a)}}finally{await t.close()}}}let f=d.from(u()),p;if(r===`zstd`){let e=l.createZstdCompress;if(!e)throw Error(`zstd compression not available in this Node.js version`);p=f.pipe(e({level:3})),a[`Content-Encoding`]=`zstd`}else if(r===`gzip`){let e=l.createGzip;if(!e)throw Error(`gzip compression not available in this Node.js version`);p=f.pipe(e({level:6})),a[`Content-Encoding`]=`gzip`}else p=f;let m=new AbortController,h,g=e=>{h=e,m.abort()};f.on(`error`,g),p.on(`error`,g);let _=await G.fetch(i,{method:`POST`,headers:a,body:p,duplex:`half`,signal:m.signal}).catch(e=>{throw h||e}),v=await _.text();if(!_.ok)throw Ne(`folder-sync http`,_.status,v,_.headers);return JSON.parse(v)}async function Ke(e){return await new Promise((t,n)=>{let r=S.createHash(`sha256`),i=c.createReadStream(e);i.on(`data`,e=>r.update(e)),i.on(`error`,n),i.on(`end`,()=>t(r.digest(`hex`)))})}function qe(e,t){if(t.includes(`\\`))throw Error(`symlink ${e} -> ${t} target contains a backslash, which the daemon rejects; remove the link or pass --ignore to skip it`);let n=b.posix.normalize(b.posix.join(b.posix.dirname(e),t));if(n===`.`||n===`..`||n.startsWith(`../`))throw Error(`symlink ${e} -> ${t} points outside the sync root; run the sync from the repo root that contains the target, remove the link, or pass --ignore to skip it`)}async function Je(e,t,n,r){let i=b.resolve(e),a=await c.promises.stat(i);if(a.isFile()){let e=b.basename(i);return t(e)?[]:[{path:e,size:a.size,sha256:await Ke(i),absPath:i,mode:a.mode&4095}]}let o=[],s=[i];for(;s.length;){let e=s.pop(),a=await c.promises.readdir(e,{withFileTypes:!0});for(let l of a){let a=b.join(e,l.name),u=b.relative(i,a).split(b.sep).join(`/`);if(l.isDirectory()){if(t(u+`/`))continue;s.push(a);continue}if(l.isSymbolicLink()){if(!n||t(u)||t(u+`/`))continue;let e=(await c.promises.readlink(a)).split(b.sep).join(`/`);if(b.posix.isAbsolute(e)||b.win32.isAbsolute(e)){r?.(`warn`,`skipping symlink ${u} -> ${e}: absolute targets cannot resolve remotely`);continue}qe(u,e);let i=S.createHash(`sha256`).update(e).digest(`hex`);o.push({path:u,size:Buffer.byteLength(e),sha256:i,absPath:a,mode:0,linkTarget:e});continue}if(!l.isFile()||t(u))continue;let d=await c.promises.stat(a),f=await Ke(a),p=d.mode&4095;o.push({path:u,size:d.size,sha256:f,absPath:a,mode:p})}}return o.sort((e,t)=>e.path.localeCompare(t.path)),o}async function Ye(e){if(!e||e.length===0)return[];let t=[];for(let n of e){let e=b.posix.normalize(n.remotePath),r=b.resolve(n.localPath),i=await c.promises.stat(r);if(!i.isFile())throw Error(`additional file localPath must be a file: ${n.localPath}`);let a=await Ke(r);t.push({path:e,size:i.size,sha256:a,absPath:r,mode:i.mode&4095})}return t.sort((e,t)=>e.path.localeCompare(t.path)),t}let Xe=null;async function Ze(){return Xe||=(async()=>await import(`./limrun-delta-sync-omitted.js`))().catch(e=>{throw Xe=null,e}),await Xe}async function*Qe(e){for await(let t of c.createReadStream(e,{highWaterMark:1048576}))t instanceof Uint8Array?yield t:yield Buffer.from(t)}function $e(e){return Math.max(0,Math.ceil(e*.9)-1)}async function et(e,t,n,r){let i=await Ze(),a=await c.promises.open(e,`r`),o=(await a.stat()).size,l=c.createWriteStream(n),u=0,d=!1,f={size:o,read:async(e,t)=>{let{bytesRead:n}=await a.read(t,0,t.byteLength,e);return n}};try{for await(let e of i.encode(Qe(t),f)){if(u+=e.byteLength,u>r){d=!0;break}l.write(e)||await s(l,`drain`)}l.end(),await s(l,`finish`)}catch(e){throw l.destroy(),await c.promises.rm(n,{force:!0}),e}finally{await a.close()}return d?(await c.promises.rm(n,{force:!0}),-1):u}async function tt(e,t,n,r,i){let a=t.split(`/`),o=b.join(e,a.join(b.sep));if(i){let t=e;for(let e=0;e<a.length-1;e++){if(t=b.join(t,a[e]),i.has(t))continue;let n=await c.promises.lstat(t).catch(()=>null);n&&!n.isDirectory()?await c.promises.rm(t,{recursive:!0,force:!0}):n&&i.add(t)}}await c.promises.mkdir(b.dirname(o),{recursive:!0});let s=await c.promises.lstat(o).catch(()=>null);if(s&&(s.isSymbolicLink()||s.isDirectory()||r!==void 0)&&await c.promises.rm(o,{recursive:!0,force:!0}),r!==void 0){await c.promises.symlink(r,o);return}await c.promises.copyFile(n,o)}function nt(e,t){return b.join(e,t.split(`/`).join(b.sep))}async function rt(e,t){let n=(e,n)=>{(t.log??Ie)(e,`syncFolder: ${n}`)};n(`debug`,`setup ${e} watch=${t.watch} basisCacheDir=${t.basisCacheDir}`);let r=async n=>{let r=q(),i=await it(e,t,n);return t.onSyncComplete?.({bytesSent:i.bytesSent??0,durationMs:q()-r,...i.installedAppPath===void 0?{}:{installedAppPath:i.installedAppPath},...i.installedBundleId===void 0?{}:{installedBundleId:i.installedBundleId}}),i};if(!t.watch)return await r();let i=await r(`startup`),a=!1,o=!1,s=!1,l,u,d=async e=>{a=!0;try{await r(e)}finally{a=!1,o&&!s&&(o=!1,f(`queued-changes`))}},f=e=>{if(s)return;if(a){o=!0;return}let t=d(e).catch(e=>{n(`error`,`syncFolder: watch sync failed: ${e instanceof Error?e.message:String(e)}`)});u=t,t.finally(()=>{u===t&&(u=void 0)})},p=e=>{s||(l&&clearTimeout(l),l=setTimeout(()=>{l=void 0,f(e)},500))},m=await c.promises.stat(e),h;if(m.isFile()){let t=b.basename(e),n=b.dirname(e),r=c.watch(n,(e,n)=>{!n||n.toString()!==t||p(`change:${t}`)});h={close:()=>r.close()}}else h=await Me({rootPath:e,log:n,ignoreFn:t.ignoreFn,onChange:e=>{p(e)}});return{...i,stopWatching:async()=>{s=!0,o=!1,l&&=(clearTimeout(l),void 0),h.close(),await u}}}async function it(e,t,n,r=0){let i=q(),a=t.log??Ie,o=(e,t)=>a(e,`syncFolder: ${t}`),s=await Je(e,t.ignoreFn,t.syncSymlinks??!1,o),u=await Ye(t.additionalFiles),d=[...s,...u].sort((e,t)=>e.path.localeCompare(t.path)),f=new Map(d.map(e=>[e.path,e])),p=ze(`sync`),m=b.basename(b.resolve(e)),h=t.compression??(l.createZstdCompress?`zstd`:`gzip`);await c.promises.mkdir(t.basisCacheDir,{recursive:!0});let _=0,v=0,y=0,x=0,S=Ve(),C=[];for(let e of d){let n=nt(t.basisCacheDir,e.path),r=await c.promises.lstat(n).catch(()=>null);if(!r){C.push(e);continue}if(e.linkTarget!==void 0){if(!r.isSymbolicLink()){C.push(e);continue}(await c.promises.readlink(n)).split(b.sep).join(`/`)!==e.linkTarget&&C.push(e);continue}if(!r.isFile()){C.push(e);continue}await Ke(n)!==e.sha256.toLowerCase()&&C.push(e)}let w=C.filter(e=>e.linkTarget===void 0),T=new Set(C.map(e=>e.path)),E=await He(w,S,async e=>{let n=nt(t.basisCacheDir,e.path);if((e.size>=65536?await c.promises.lstat(n).catch(()=>null):null)?.isFile()){let t=await Ke(n),r=await c.promises.mkdtemp(b.join(g.tmpdir(),`limulator-xdelta3-`)),i=b.join(r,`patch.xdelta3`),a=q(),s=await et(n,e.absPath,i,$e(e.size)),l=q()-a;if(x+=l,s>=0)return o(`debug`,`delta(file): ${b.posix.basename(e.path)} patchSize=${s} encode=${Le(l)}`),v+=s,{payload:{kind:`delta`,path:e.path,basisSha256:t.toLowerCase(),targetSha256:e.sha256.toLowerCase(),length:s},filePath:i,cleanupDir:r};try{await c.promises.rm(r,{recursive:!0,force:!0})}catch{}}return o(`debug`,`full(file): ${e.path} size=${e.size}`),e.size>=Fe&&o(`debug`,`uploading large file ${e.path} (${Re(e.size)})`),_+=e.size,{payload:{kind:`full`,path:e.path,targetSha256:e.sha256.toLowerCase(),length:e.size},filePath:e.absPath}}),D={id:p,rootName:m,install:t.install,...t.launchMode?{launchMode:t.launchMode}:{},files:d.map(e=>({path:e.path,size:e.size,sha256:e.sha256.toLowerCase(),...e.linkTarget===void 0?{mode:e.mode}:{link:e.linkTarget}})),payloads:E.map(e=>e.payload)},O=E.some(e=>e.payload.kind===`delta`),k=t.compression??(O?`identity`:h);o(`debug`,`sync started files=${d.length}${n?` reason=${n}`:``} compression=${k}`);let A=q(),j;try{j=await Ge(t,D,E.map(e=>({filePath:e.filePath})),k)}catch(i){if(r<1&&Be(i))return o(`warn`,`sync retrying after missing file during upload (ENOENT)`),await it(e,t,n,r+1);throw i}if(y+=q()-A,!j.ok&&j.needFull&&j.needFull.length>0){let e=new Set(j.needFull),n=[...e].filter(e=>f.get(e)?.linkTarget!==void 0);if(n.length>0)throw Error(`this instance's build daemon does not support symlinks yet (needs an updated limbuild); recreate the instance or retry later. Paths: ${n.join(`, `)}`);let r=[];for(let t of e){let e=f.get(t);e&&(e.size>=Fe&&o(`debug`,`uploading large file ${e.path} (${Re(e.size)})`),_+=e.size,T.add(e.path),r.push({payload:{kind:`full`,path:e.path,targetSha256:e.sha256.toLowerCase(),length:e.size},filePath:e.absPath}))}if(r.length>0){o(`debug`,`daemon requested a full upload for ${r.length} files (no matching basis); retrying once`);let e={...D,id:ze(`sync`),payloads:r.map(e=>e.payload)},n=q();j=await Ge(t,e,r.map(e=>({filePath:e.filePath})),t.compression??h),y+=q()-n}}await Promise.all(E.map(async e=>{if(e.cleanupDir)try{await c.promises.rm(e.cleanupDir,{recursive:!0,force:!0})}catch{}}));let M=q()-i;if(!j.ok)throw Error(j.error??`sync failed`);let N=q()-i,P=_+v;o(`debug`,`sync complete: files=${d.length} changed=${T.size} sent=${Re(P)} in ${Le(N)}`),o(`debug`,`sync timing syncWork=${Le(M)} total=${Le(N)}`);let F={bytesSent:P};j.installedAppPath&&(F.installedAppPath=j.installedAppPath),j.bundleId&&(F.installedBundleId=j.bundleId);let I=t.syncSymlinks?new Set:void 0;for(let e of d)await tt(t.basisCacheDir,e.path,e.absPath,e.linkTarget,I);return F}var at=e(n(((e,t)=>{function n(e){return Array.isArray(e)?e:[e]}let r=/^\s+$/,i=/(?:[^\\]|^)\\$/,a=/^\\!/,o=/^\\#/,s=/\r?\n/g,c=/^\.{0,2}\/|^\.{1,2}$/,l=/\/$/,u=`node-ignore`;typeof Symbol<`u`&&(u=Symbol.for(`node-ignore`));let d=u,f=(e,t,n)=>(Object.defineProperty(e,t,{value:n}),n),p=/([0-z])-([0-z])/g,m=()=>!1,h=e=>e.replace(p,(e,t,n)=>t.charCodeAt(0)<=n.charCodeAt(0)?e:``),g=e=>e.startsWith(`!`)||e.startsWith(`\\^`)?`^${e.slice(e[0]===`!`?1:2)}`:e,_=e=>{let{length:t}=e;return e.slice(0,t-t%2)},v=[[/^\uFEFF/,()=>``],[/((?:\\\\)*?)(\\?\s+)$/,(e,t,n)=>t+(n.indexOf(`\\`)===0?` `:``)],[/(\\+?)\s/g,(e,t)=>{let{length:n}=t;return t.slice(0,n-n%2)+` `}],[/[\\$.|*+(){^]/g,e=>`\\${e}`],[/(?!\\)\?/g,()=>`[^/]`],[/^\//,()=>`^`],[/\//g,()=>`\\/`],[/^\^*(?:\\\*\\\*\\\/)+/,()=>`^(?:.*\\/)?`],[/^(?=[^^])/,function(){return/\/(?!$)/.test(this)?`^`:`(?:^|\\/)`}],[/\\\/\\\*\\\*(?=\\\/|$)/g,(e,t,n)=>t+6<n.length?`(?:\\/[^\\/]+)*`:`\\/.+`],[/(^|[^\\]+)(\\\*)+(?=.+)/g,(e,t,n)=>t+n.replace(/\\\*/g,`[^\\/]*`)],[/\\\\\\(?=[$.|*+(){^])/g,()=>`\\`],[/\\\\/g,()=>`\\`],[/(\\)?\[([^\]/]*?)(\\*)($|\])/g,(e,t,n,r,i)=>t===`\\`?`\\[${n}${_(r)}${i}`:i===`]`&&r.length%2==0?`[${g(h(n))}${r}]`:`[]`],[/(?:[^*])$/,e=>/\/$/.test(e)?`${e}$`:`${e}(?=$|\\/$)`]],y=/(^|\\\/)?\\\*$/,b=`regex`,x=`checkRegex`,S={[b](e,t){return`${t?`${t}[^/]+`:`[^/]*`}(?=$|\\/$)`},[x](e,t){return`${t?`${t}[^/]*`:`[^/]*`}(?=$|\\/$)`}},C=e=>v.reduce((t,[n,r])=>t.replace(n,r.bind(e)),e),w=e=>typeof e==`string`,T=e=>e&&w(e)&&!r.test(e)&&!i.test(e)&&e.indexOf(`#`)!==0,E=e=>e.split(s).filter(Boolean);var D=class{constructor(e,t,n,r,i,a){this.pattern=e,this.mark=t,this.negative=i,f(this,`body`,n),f(this,`ignoreCase`,r),f(this,`regexPrefix`,a)}get regex(){let e=`_regex`;return this[e]?this[e]:this._make(b,e)}get checkRegex(){let e=`_checkRegex`;return this[e]?this[e]:this._make(x,e)}_make(e,t){let n=this.regexPrefix.replace(y,S[e]),r=this.ignoreCase?new RegExp(n,`i`):new RegExp(n);return f(this,t,r)}};let O=({pattern:e,mark:t},n)=>{let r=!1,i=e;i.indexOf(`!`)===0&&(r=!0,i=i.substr(1)),i=i.replace(a,`!`).replace(o,`#`);let s=C(i);return new D(e,t,i,n,r,s)};var k=class{constructor(e){this._ignoreCase=e,this._rules=[]}_add(e){if(e&&e[d]){this._rules=this._rules.concat(e._rules._rules),this._added=!0;return}if(w(e)&&(e={pattern:e}),T(e.pattern)){let t=O(e,this._ignoreCase);this._added=!0,this._rules.push(t)}}add(e){return this._added=!1,n(w(e)?E(e):e).forEach(this._add,this),this._added}test(e,t,n){let r=!1,i=!1,a;this._rules.forEach(o=>{let{negative:s}=o;i===s&&r!==i||s&&!r&&!i&&!t||o[n].test(e)&&(r=!s,i=s,a=s?void 0:o)});let o={ignored:r,unignored:i};return a&&(o.rule=a),o}};let A=(e,t)=>{throw new t(e)},j=(e,t,n)=>w(e)?e?!j.isNotRelative(e)||n(`path should be a \`path.relative()\`d string, but got "${t}"`,RangeError):n(`path must not be empty`,TypeError):n(`path must be a string, but got \`${t}\``,TypeError),M=e=>c.test(e);j.isNotRelative=M,j.convert=e=>e;var N=class{constructor({ignorecase:e=!0,ignoreCase:t=e,allowRelativePaths:n=!1}={}){f(this,d,!0),this._rules=new k(t),this._strictPathCheck=!n,this._initCache()}_initCache(){this._ignoreCache=Object.create(null),this._testCache=Object.create(null)}add(e){return this._rules.add(e)&&this._initCache(),this}addPattern(e){return this.add(e)}_test(e,t,n,r){let i=e&&j.convert(e);return j(i,e,this._strictPathCheck?A:m),this._t(i,t,n,r)}checkIgnore(e){if(!l.test(e))return this.test(e);let t=e.split(`/`).filter(Boolean);if(t.pop(),t.length){let e=this._t(t.join(`/`)+`/`,this._testCache,!0,t);if(e.ignored)return e}return this._rules.test(e,!1,x)}_t(e,t,n,r){if(e in t)return t[e];if(r||=e.split(`/`).filter(Boolean),r.pop(),!r.length)return t[e]=this._rules.test(e,n,b);let i=this._t(r.join(`/`)+`/`,t,n,r);return t[e]=i.ignored?i:this._rules.test(e,n,b)}ignores(e){return this._test(e,this._ignoreCache,!1).ignored}createFilter(){return e=>!this.ignores(e)}filter(e){return n(e).filter(this.createFilter())}test(e){return this._test(e,this._testCache,!0)}};let P=e=>new N(e),F=e=>j(e&&j.convert(e),e,m),I=()=>{j.convert=e=>/^\\\\\?\\/.test(e)||/["<>|\u0000-\u001F]+/u.test(e)?e:e.replace(/\\/g,`/`);let e=/^[a-z]:\//i;j.isNotRelative=t=>e.test(t)||M(t)};typeof process<`u`&&process.platform===`win32`&&I(),t.exports=P,P.default=P,t.exports.isPathValid=F,f(t.exports,Symbol.for(`setupWindows`),I)}))(),1);const ot=u(C);function st(e){return e.split(b.sep).join(`/`).replace(/^\.\/+/,``).replace(/\/+/g,`/`)}function ct(e){let t=e.length;for(;t>0&&e[t-1]===`/`;)t--;return t===e.length?e:e.slice(0,t)}async function lt(e){try{let{stdout:t}=await ot(`git`,[`ls-files`,`-z`],{cwd:e,maxBuffer:268435456}),n=new Set,r=new Set;for(let e of t.split(`\0`)){if(!e)continue;n.add(e);let t=e.lastIndexOf(`/`);for(;t>0;)r.add(e.substring(0,t)),t=e.lastIndexOf(`/`,t-1)}return{tracked:n,prefixes:r}}catch{return null}}const ut=[`build/`,`.build/`,`DerivedData/`,`Index.noindex/`,`ModuleCache.noindex/`,`.index-build/`,`.swiftpm/`,`Pods/`,`Carthage/Build/`];async function dt(e,t){let n=b.resolve(e),r=new Map,i=e=>{let t=r.get(e);if(t!==void 0)return t;try{let r=c.readFileSync(b.join(n,e.split(`/`).join(b.sep),`.gitignore`),`utf-8`);t=(0,at.default)({ignorecase:!1,allowRelativePaths:!0}).add(r)}catch{t=null}return r.set(e,t),t},a=t.nestedGitignore??!!t.xcodeDefaults,o=e=>{let t=ct(e),n=e.endsWith(`/`)?`/`:``,r=t.split(`/`),o,s=a?r.length:1;for(let e=0;e<s;e++){let t=i(r.slice(0,e).join(`/`));if(!t)continue;let a=t.test(r.slice(e).join(`/`)+n);if(a.ignored||a.unignored){o={ignored:a.ignored};let e=a.rule?.pattern;e!==void 0&&(o.rule=e)}}return o},s=ct(st(b.relative(n,t.basisCacheDir))),l=s&&s!==`.`&&s!==`..`&&!s.startsWith(`../`),u=await lt(n),d=t.log,f=new Set;return e=>{let n=st(e);if(!n)return!1;let r=ct(n);if(l&&(r===s||r.startsWith(`${s}/`)))return!0;if(t.include?.(n))return!1;if(r===`.git`||r.startsWith(`.git/`)||r.endsWith(`/.git`)||r.includes(`/.git/`)||r===`.DS_Store`||r.endsWith(`/.DS_Store`))return!0;if(t.xcodeDefaults){for(let e of ut)if(n.startsWith(e))return!0;if(n.includes(`/xcuserdata/`)||n.includes(`.dSYM/`))return!0}if(r.endsWith(`.xcconfig`))return!1;let i=r.slice(r.lastIndexOf(`/`)+1);if(i.endsWith(`.env`)||i.startsWith(`.env.`))return!1;let a=o(n);if(a?.ignored){if(u&&(u.tracked.has(r)||u.prefixes.has(r))){let e=a.rule??`<unknown>`;if(!f.has(e)){f.add(e);let t=`.gitignore rule '${e}' is dropping '${r}', which is tracked in git. The remote build will not see this path. Remove or scope the rule, or pass --include, if you need it synced.`;d?d(`warn`,t):console.warn(`[FolderSync]`,t)}}return!0}return!!t.additional?.(n)}}var ft=n(((e,t)=>{let n=[`nodebuffer`,`arraybuffer`,`fragments`],r=typeof Blob<`u`;r&&n.push(`blob`),t.exports={BINARY_TYPES:n,CLOSE_TIMEOUT:3e4,EMPTY_BUFFER:Buffer.alloc(0),GUID:`258EAFA5-E914-47DA-95CA-C5AB0DC85B11`,hasBlob:r,kForOnEventAttribute:Symbol(`kIsForOnEventAttribute`),kListener:Symbol(`kListener`),kStatusCode:Symbol(`status-code`),kWebSocket:Symbol(`websocket`),NOOP:()=>{}}})),pt=n(((e,n)=>{let{EMPTY_BUFFER:r}=ft(),i=Buffer[Symbol.species];function a(e,t){if(e.length===0)return r;if(e.length===1)return e[0];let n=Buffer.allocUnsafe(t),a=0;for(let t=0;t<e.length;t++){let r=e[t];n.set(r,a),a+=r.length}return a<t?new i(n.buffer,n.byteOffset,a):n}function o(e,t,n,r,i){for(let a=0;a<i;a++)n[r+a]=e[a]^t[a&3]}function s(e,t){for(let n=0;n<e.length;n++)e[n]^=t[n&3]}function c(e){return e.length===e.buffer.byteLength?e.buffer:e.buffer.slice(e.byteOffset,e.byteOffset+e.length)}function l(e){if(l.readOnly=!0,Buffer.isBuffer(e))return e;let t;return e instanceof ArrayBuffer?t=new i(e):ArrayBuffer.isView(e)?t=new i(e.buffer,e.byteOffset,e.byteLength):(t=Buffer.from(e),l.readOnly=!1),t}if(n.exports={concat:a,mask:o,toArrayBuffer:c,toBuffer:l,unmask:s},!process.env.WS_NO_BUFFER_UTIL)try{let e=t(`bufferutil`);n.exports.mask=function(t,n,r,i,a){a<48?o(t,n,r,i,a):e.mask(t,n,r,i,a)},n.exports.unmask=function(t,n){t.length<32?s(t,n):e.unmask(t,n)}}catch{}})),mt=n(((e,t)=>{let n=Symbol(`kDone`),r=Symbol(`kRun`);t.exports=class{constructor(e){this[n]=()=>{this.pending--,this[r]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[r]()}[r](){if(this.pending!==this.concurrency&&this.jobs.length){let e=this.jobs.shift();this.pending++,e(this[n])}}}})),ht=n(((e,n)=>{let r=t(`zlib`),i=pt(),a=mt(),{kStatusCode:o}=ft(),s=Buffer[Symbol.species],c=Buffer.from([0,0,255,255]),l=Symbol(`permessage-deflate`),u=Symbol(`total-length`),d=Symbol(`callback`),f=Symbol(`buffers`),p=Symbol(`error`),m;n.exports=class{constructor(e){if(this._options=e||{},this._threshold=this._options.threshold===void 0?1024:this._options.threshold,this._maxPayload=this._options.maxPayload|0,this._isServer=!!this._options.isServer,this._deflate=null,this._inflate=null,this.params=null,!m){let e=this._options.concurrencyLimit===void 0?10:this._options.concurrencyLimit;m=new a(e)}}static get extensionName(){return`permessage-deflate`}offer(){let e={};return this._options.serverNoContextTakeover&&(e.server_no_context_takeover=!0),this._options.clientNoContextTakeover&&(e.client_no_context_takeover=!0),this._options.serverMaxWindowBits&&(e.server_max_window_bits=this._options.serverMaxWindowBits),this._options.clientMaxWindowBits?e.client_max_window_bits=this._options.clientMaxWindowBits:this._options.clientMaxWindowBits??(e.client_max_window_bits=!0),e}accept(e){return e=this.normalizeParams(e),this.params=this._isServer?this.acceptAsServer(e):this.acceptAsClient(e),this.params}cleanup(){if(this._inflate&&=(this._inflate.close(),null),this._deflate){let e=this._deflate[d];this._deflate.close(),this._deflate=null,e&&e(Error(`The deflate stream was closed while data was being processed`))}}acceptAsServer(e){let t=this._options,n=e.find(e=>!(t.serverNoContextTakeover===!1&&e.server_no_context_takeover||e.server_max_window_bits&&(t.serverMaxWindowBits===!1||typeof t.serverMaxWindowBits==`number`&&t.serverMaxWindowBits>e.server_max_window_bits)||typeof t.clientMaxWindowBits==`number`&&(typeof e.client_max_window_bits==`number`?t.clientMaxWindowBits>e.client_max_window_bits:!e.client_max_window_bits)));if(!n)throw Error(`None of the extension offers can be accepted`);return t.serverNoContextTakeover&&(n.server_no_context_takeover=!0),t.clientNoContextTakeover&&(n.client_no_context_takeover=!0),typeof t.serverMaxWindowBits==`number`&&(n.server_max_window_bits=t.serverMaxWindowBits),typeof t.clientMaxWindowBits==`number`?n.client_max_window_bits=t.clientMaxWindowBits:(n.client_max_window_bits===!0||t.clientMaxWindowBits===!1)&&delete n.client_max_window_bits,n}acceptAsClient(e){let t=e[0];if(this._options.clientNoContextTakeover===!1&&t.client_no_context_takeover)throw Error(`Unexpected parameter "client_no_context_takeover"`);if(!t.client_max_window_bits)typeof this._options.clientMaxWindowBits==`number`&&(t.client_max_window_bits=this._options.clientMaxWindowBits);else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits==`number`&&t.client_max_window_bits>this._options.clientMaxWindowBits)throw Error(`Unexpected or invalid parameter "client_max_window_bits"`);return t}normalizeParams(e){return e.forEach(e=>{Object.keys(e).forEach(t=>{let n=e[t];if(n.length>1)throw Error(`Parameter "${t}" must have only a single value`);if(n=n[0],t===`client_max_window_bits`){if(n!==!0){let e=+n;if(!Number.isInteger(e)||e<8||e>15)throw TypeError(`Invalid value for parameter "${t}": ${n}`);n=e}else if(!this._isServer)throw TypeError(`Invalid value for parameter "${t}": ${n}`)}else if(t===`server_max_window_bits`){let e=+n;if(!Number.isInteger(e)||e<8||e>15)throw TypeError(`Invalid value for parameter "${t}": ${n}`);n=e}else if(t===`client_no_context_takeover`||t===`server_no_context_takeover`){if(n!==!0)throw TypeError(`Invalid value for parameter "${t}": ${n}`)}else throw Error(`Unknown parameter "${t}"`);e[t]=n})}),e}decompress(e,t,n){m.add(r=>{this._decompress(e,t,(e,t)=>{r(),n(e,t)})})}compress(e,t,n){m.add(r=>{this._compress(e,t,(e,t)=>{r(),n(e,t)})})}_decompress(e,t,n){let a=this._isServer?`client`:`server`;if(!this._inflate){let e=`${a}_max_window_bits`,t=typeof this.params[e]==`number`?this.params[e]:r.Z_DEFAULT_WINDOWBITS;this._inflate=r.createInflateRaw({...this._options.zlibInflateOptions,windowBits:t}),this._inflate[l]=this,this._inflate[u]=0,this._inflate[f]=[],this._inflate.on(`error`,_),this._inflate.on(`data`,g)}this._inflate[d]=n,this._inflate.write(e),t&&this._inflate.write(c),this._inflate.flush(()=>{let e=this._inflate[p];if(e){this._inflate.close(),this._inflate=null,n(e);return}let r=i.concat(this._inflate[f],this._inflate[u]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[u]=0,this._inflate[f]=[],t&&this.params[`${a}_no_context_takeover`]&&this._inflate.reset()),n(null,r)})}_compress(e,t,n){let a=this._isServer?`server`:`client`;if(!this._deflate){let e=`${a}_max_window_bits`,t=typeof this.params[e]==`number`?this.params[e]:r.Z_DEFAULT_WINDOWBITS;this._deflate=r.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:t}),this._deflate[u]=0,this._deflate[f]=[],this._deflate.on(`data`,h)}this._deflate[d]=n,this._deflate.write(e),this._deflate.flush(r.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let e=i.concat(this._deflate[f],this._deflate[u]);t&&(e=new s(e.buffer,e.byteOffset,e.length-4)),this._deflate[d]=null,this._deflate[u]=0,this._deflate[f]=[],t&&this.params[`${a}_no_context_takeover`]&&this._deflate.reset(),n(null,e)})}};function h(e){this[f].push(e),this[u]+=e.length}function g(e){if(this[u]+=e.length,this[l]._maxPayload<1||this[u]<=this[l]._maxPayload){this[f].push(e);return}this[p]=RangeError(`Max payload size exceeded`),this[p].code=`WS_ERR_UNSUPPORTED_MESSAGE_LENGTH`,this[p][o]=1009,this.removeListener(`data`,g),this.reset()}function _(e){if(this[l]._inflate=null,this[p]){this[d](this[p]);return}e[o]=1007,this[d](e)}})),gt=n(((e,n)=>{let{isUtf8:r}=t(`buffer`),{hasBlob:i}=ft(),a=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0];function o(e){return e>=1e3&&e<=1014&&e!==1004&&e!==1005&&e!==1006||e>=3e3&&e<=4999}function s(e){let t=e.length,n=0;for(;n<t;)if(!(e[n]&128))n++;else if((e[n]&224)==192){if(n+1===t||(e[n+1]&192)!=128||(e[n]&254)==192)return!1;n+=2}else if((e[n]&240)==224){if(n+2>=t||(e[n+1]&192)!=128||(e[n+2]&192)!=128||e[n]===224&&(e[n+1]&224)==128||e[n]===237&&(e[n+1]&224)==160)return!1;n+=3}else if((e[n]&248)==240){if(n+3>=t||(e[n+1]&192)!=128||(e[n+2]&192)!=128||(e[n+3]&192)!=128||e[n]===240&&(e[n+1]&240)==128||e[n]===244&&e[n+1]>143||e[n]>244)return!1;n+=4}else return!1;return!0}function c(e){return i&&typeof e==`object`&&typeof e.arrayBuffer==`function`&&typeof e.type==`string`&&typeof e.stream==`function`&&(e[Symbol.toStringTag]===`Blob`||e[Symbol.toStringTag]===`File`)}if(n.exports={isBlob:c,isValidStatusCode:o,isValidUTF8:s,tokenChars:a},r)n.exports.isValidUTF8=function(e){return e.length<24?s(e):r(e)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let e=t(`utf-8-validate`);n.exports.isValidUTF8=function(t){return t.length<32?s(t):e(t)}}catch{}})),_t=n(((e,n)=>{let{Writable:r}=t(`stream`),i=ht(),{BINARY_TYPES:a,EMPTY_BUFFER:o,kStatusCode:s,kWebSocket:c}=ft(),{concat:l,toArrayBuffer:u,unmask:d}=pt(),{isValidStatusCode:f,isValidUTF8:p}=gt(),m=Buffer[Symbol.species];n.exports=class extends r{constructor(e={}){super(),this._allowSynchronousEvents=e.allowSynchronousEvents===void 0||e.allowSynchronousEvents,this._binaryType=e.binaryType||a[0],this._extensions=e.extensions||{},this._isServer=!!e.isServer,this._maxBufferedChunks=e.maxBufferedChunks|0,this._maxFragments=e.maxFragments|0,this._maxPayload=e.maxPayload|0,this._skipUTF8Validation=!!e.skipUTF8Validation,this[c]=void 0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._numFragments=0,this._fragments=[],this._errored=!1,this._loop=!1,this._state=0}_write(e,t,n){if(this._opcode===8&&this._state==0)return n();if(this._maxBufferedChunks>0&&this._buffers.length>=this._maxBufferedChunks){n(this.createError(RangeError,`Too many buffered chunks`,!1,1008,`WS_ERR_TOO_MANY_BUFFERED_PARTS`));return}this._bufferedBytes+=e.length,this._buffers.push(e),this.startLoop(n)}consume(e){if(this._bufferedBytes-=e,e===this._buffers[0].length)return this._buffers.shift();if(e<this._buffers[0].length){let t=this._buffers[0];return this._buffers[0]=new m(t.buffer,t.byteOffset+e,t.length-e),new m(t.buffer,t.byteOffset,e)}let t=Buffer.allocUnsafe(e);do{let n=this._buffers[0],r=t.length-e;e>=n.length?t.set(this._buffers.shift(),r):(t.set(new Uint8Array(n.buffer,n.byteOffset,e),r),this._buffers[0]=new m(n.buffer,n.byteOffset+e,n.length-e)),e-=n.length}while(e>0);return t}startLoop(e){this._loop=!0;do switch(this._state){case 0:this.getInfo(e);break;case 1:this.getPayloadLength16(e);break;case 2:this.getPayloadLength64(e);break;case 3:this.getMask();break;case 4:this.getData(e);break;case 5:case 6:this._loop=!1;return}while(this._loop);this._errored||e()}getInfo(e){if(this._bufferedBytes<2){this._loop=!1;return}let t=this.consume(2);if(t[0]&48){e(this.createError(RangeError,`RSV2 and RSV3 must be clear`,!0,1002,`WS_ERR_UNEXPECTED_RSV_2_3`));return}let n=(t[0]&64)==64;if(n&&!this._extensions[i.extensionName]){e(this.createError(RangeError,`RSV1 must be clear`,!0,1002,`WS_ERR_UNEXPECTED_RSV_1`));return}if(this._fin=(t[0]&128)==128,this._opcode=t[0]&15,this._payloadLength=t[1]&127,this._opcode===0){if(n){e(this.createError(RangeError,`RSV1 must be clear`,!0,1002,`WS_ERR_UNEXPECTED_RSV_1`));return}if(!this._fragmented){e(this.createError(RangeError,`invalid opcode 0`,!0,1002,`WS_ERR_INVALID_OPCODE`));return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){e(this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,`WS_ERR_INVALID_OPCODE`));return}this._compressed=n}else if(this._opcode>7&&this._opcode<11){if(!this._fin){e(this.createError(RangeError,`FIN must be set`,!0,1002,`WS_ERR_EXPECTED_FIN`));return}if(n){e(this.createError(RangeError,`RSV1 must be clear`,!0,1002,`WS_ERR_UNEXPECTED_RSV_1`));return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){e(this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,`WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH`));return}}else{e(this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,`WS_ERR_INVALID_OPCODE`));return}if(!this._fin&&!this._fragmented&&(this._fragmented=this._opcode),this._masked=(t[1]&128)==128,this._isServer){if(!this._masked){e(this.createError(RangeError,`MASK must be set`,!0,1002,`WS_ERR_EXPECTED_MASK`));return}}else if(this._masked){e(this.createError(RangeError,`MASK must be clear`,!0,1002,`WS_ERR_UNEXPECTED_MASK`));return}this._payloadLength===126?this._state=1:this._payloadLength===127?this._state=2:this.haveLength(e)}getPayloadLength16(e){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(e)}getPayloadLength64(e){if(this._bufferedBytes<8){this._loop=!1;return}let t=this.consume(8),n=t.readUInt32BE(0);if(n>2**21-1){e(this.createError(RangeError,`Unsupported WebSocket frame: payload length > 2^53 - 1`,!1,1009,`WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH`));return}this._payloadLength=n*2**32+t.readUInt32BE(4),this.haveLength(e)}haveLength(e){if(this._payloadLength&&this._opcode<8&&(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0)){e(this.createError(RangeError,`Max payload size exceeded`,!1,1009,`WS_ERR_UNSUPPORTED_MESSAGE_LENGTH`));return}this._state=this._masked?3:4}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=4}getData(e){let t=o;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}t=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0&&d(t,this._mask)}if(this._opcode>7){this.controlMessage(t,e);return}if(this._maxFragments>0&&++this._numFragments>this._maxFragments){e(this.createError(RangeError,`Too many message fragments`,!1,1008,`WS_ERR_TOO_MANY_BUFFERED_PARTS`));return}if(this._compressed){this._state=5,this.decompress(t,e);return}t.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(t)),this.dataMessage(e)}decompress(e,t){this._extensions[i.extensionName].decompress(e,this._fin,(e,n)=>{if(e)return t(e);if(n.length){if(this._messageLength+=n.length,this._messageLength>this._maxPayload&&this._maxPayload>0){t(this.createError(RangeError,`Max payload size exceeded`,!1,1009,`WS_ERR_UNSUPPORTED_MESSAGE_LENGTH`));return}this._fragments.push(n)}this.dataMessage(t),this._state===0&&this.startLoop(t)})}dataMessage(e){if(!this._fin){this._state=0;return}let t=this._messageLength,n=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._numFragments=0,this._fragments=[],this._opcode===2){let r;r=this._binaryType===`nodebuffer`?l(n,t):this._binaryType===`arraybuffer`?u(l(n,t)):this._binaryType===`blob`?new Blob(n):n,this._allowSynchronousEvents?(this.emit(`message`,r,!0),this._state=0):(this._state=6,setImmediate(()=>{this.emit(`message`,r,!0),this._state=0,this.startLoop(e)}))}else{let r=l(n,t);if(!this._skipUTF8Validation&&!p(r)){e(this.createError(Error,`invalid UTF-8 sequence`,!0,1007,`WS_ERR_INVALID_UTF8`));return}this._state===5||this._allowSynchronousEvents?(this.emit(`message`,r,!1),this._state=0):(this._state=6,setImmediate(()=>{this.emit(`message`,r,!1),this._state=0,this.startLoop(e)}))}}controlMessage(e,t){if(this._opcode===8){if(e.length===0)this._loop=!1,this.emit(`conclude`,1005,o),this.end();else{let n=e.readUInt16BE(0);if(!f(n)){t(this.createError(RangeError,`invalid status code ${n}`,!0,1002,`WS_ERR_INVALID_CLOSE_CODE`));return}let r=new m(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!p(r)){t(this.createError(Error,`invalid UTF-8 sequence`,!0,1007,`WS_ERR_INVALID_UTF8`));return}this._loop=!1,this.emit(`conclude`,n,r),this.end()}this._state=0;return}this._allowSynchronousEvents?(this.emit(this._opcode===9?`ping`:`pong`,e),this._state=0):(this._state=6,setImmediate(()=>{this.emit(this._opcode===9?`ping`:`pong`,e),this._state=0,this.startLoop(t)}))}createError(e,t,n,r,i){this._loop=!1,this._errored=!0;let a=new e(n?`Invalid WebSocket frame: ${t}`:t);return Error.captureStackTrace(a,this.createError),a.code=i,a[s]=r,a}}})),vt=n(((e,n)=>{let{Duplex:r}=t(`stream`),{randomFillSync:i}=t(`crypto`),{types:{isUint8Array:a}}=t(`util`),o=ht(),{EMPTY_BUFFER:s,kWebSocket:c,NOOP:l}=ft(),{isBlob:u,isValidStatusCode:d}=gt(),{mask:f,toBuffer:p}=pt(),m=Symbol(`kByteLength`),h=Buffer.alloc(4),g=8192,_,v=g;n.exports=class e{constructor(e,t,n){this._extensions=t||{},n&&(this._generateMask=n,this._maskBuffer=Buffer.alloc(4)),this._socket=e,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=0,this.onerror=l,this[c]=void 0}static frame(e,t){let n,r=!1,a=2,o=!1;t.mask&&(n=t.maskBuffer||h,t.generateMask?t.generateMask(n):(v===g&&(_===void 0&&(_=Buffer.alloc(g)),i(_,0,g),v=0),n[0]=_[v++],n[1]=_[v++],n[2]=_[v++],n[3]=_[v++]),o=(n[0]|n[1]|n[2]|n[3])===0,a=6);let s;typeof e==`string`?(!t.mask||o)&&t[m]!==void 0?s=t[m]:(e=Buffer.from(e),s=e.length):(s=e.length,r=t.mask&&t.readOnly&&!o);let c=s;s>=65536?(a+=8,c=127):s>125&&(a+=2,c=126);let l=Buffer.allocUnsafe(r?s+a:a);return l[0]=t.fin?t.opcode|128:t.opcode,t.rsv1&&(l[0]|=64),l[1]=c,c===126?l.writeUInt16BE(s,2):c===127&&(l[2]=l[3]=0,l.writeUIntBE(s,4,6)),!t.mask||(l[1]|=128,l[a-4]=n[0],l[a-3]=n[1],l[a-2]=n[2],l[a-1]=n[3],o)?[l,e]:r?(f(e,n,l,a,s),[l]):(f(e,n,e,0,s),[l,e])}close(t,n,r,i){let o;if(t===void 0)o=s;else if(typeof t!=`number`||!d(t))throw TypeError(`First argument must be a valid error code number`);else if(n===void 0||!n.length)o=Buffer.allocUnsafe(2),o.writeUInt16BE(t,0);else{let e=Buffer.byteLength(n);if(e>123)throw RangeError(`The message must not be greater than 123 bytes`);if(o=Buffer.allocUnsafe(2+e),o.writeUInt16BE(t,0),typeof n==`string`)o.write(n,2);else if(a(n))o.set(n,2);else throw TypeError(`Second argument must be a string or a Uint8Array`)}let c={[m]:o.length,fin:!0,generateMask:this._generateMask,mask:r,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};this._state===0?this.sendFrame(e.frame(o,c),i):this.enqueue([this.dispatch,o,!1,c,i])}ping(t,n,r){let i,a;if(typeof t==`string`?(i=Buffer.byteLength(t),a=!1):u(t)?(i=t.size,a=!1):(t=p(t),i=t.length,a=p.readOnly),i>125)throw RangeError(`The data size must not be greater than 125 bytes`);let o={[m]:i,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:9,readOnly:a,rsv1:!1};u(t)?this._state===0?this.getBlobData(t,!1,o,r):this.enqueue([this.getBlobData,t,!1,o,r]):this._state===0?this.sendFrame(e.frame(t,o),r):this.enqueue([this.dispatch,t,!1,o,r])}pong(t,n,r){let i,a;if(typeof t==`string`?(i=Buffer.byteLength(t),a=!1):u(t)?(i=t.size,a=!1):(t=p(t),i=t.length,a=p.readOnly),i>125)throw RangeError(`The data size must not be greater than 125 bytes`);let o={[m]:i,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:10,readOnly:a,rsv1:!1};u(t)?this._state===0?this.getBlobData(t,!1,o,r):this.enqueue([this.getBlobData,t,!1,o,r]):this._state===0?this.sendFrame(e.frame(t,o),r):this.enqueue([this.dispatch,t,!1,o,r])}send(e,t,n){let r=this._extensions[o.extensionName],i=t.binary?2:1,a=t.compress,s,c;typeof e==`string`?(s=Buffer.byteLength(e),c=!1):u(e)?(s=e.size,c=!1):(e=p(e),s=e.length,c=p.readOnly),this._firstFragment?(this._firstFragment=!1,a&&r&&r.params[r._isServer?`server_no_context_takeover`:`client_no_context_takeover`]&&(a=s>=r._threshold),this._compress=a):(a=!1,i=0),t.fin&&(this._firstFragment=!0);let l={[m]:s,fin:t.fin,generateMask:this._generateMask,mask:t.mask,maskBuffer:this._maskBuffer,opcode:i,readOnly:c,rsv1:a};u(e)?this._state===0?this.getBlobData(e,this._compress,l,n):this.enqueue([this.getBlobData,e,this._compress,l,n]):this._state===0?this.dispatch(e,this._compress,l,n):this.enqueue([this.dispatch,e,this._compress,l,n])}getBlobData(t,n,r,i){this._bufferedBytes+=r[m],this._state=2,t.arrayBuffer().then(t=>{if(this._socket.destroyed){let e=Error(`The socket was closed while the blob was being read`);process.nextTick(y,this,e,i);return}this._bufferedBytes-=r[m];let a=p(t);n?this.dispatch(a,n,r,i):(this._state=0,this.sendFrame(e.frame(a,r),i),this.dequeue())}).catch(e=>{process.nextTick(b,this,e,i)})}dispatch(t,n,r,i){if(!n){this.sendFrame(e.frame(t,r),i);return}let a=this._extensions[o.extensionName];this._bufferedBytes+=r[m],this._state=1,a.compress(t,r.fin,(t,n)=>{if(this._socket.destroyed){let e=Error(`The socket was closed while data was being compressed`);y(this,e,i);return}this._bufferedBytes-=r[m],this._state=0,r.readOnly=!1,this.sendFrame(e.frame(n,r),i),this.dequeue()})}dequeue(){for(;this._state===0&&this._queue.length;){let e=this._queue.shift();this._bufferedBytes-=e[3][m],Reflect.apply(e[0],this,e.slice(1))}}enqueue(e){this._bufferedBytes+=e[3][m],this._queue.push(e)}sendFrame(e,t){e.length===2?(this._socket.cork(),this._socket.write(e[0]),this._socket.write(e[1],t),this._socket.uncork()):this._socket.write(e[0],t)}};function y(e,t,n){typeof n==`function`&&n(t);for(let n=0;n<e._queue.length;n++){let r=e._queue[n],i=r[r.length-1];typeof i==`function`&&i(t)}}function b(e,t,n){y(e,t,n),e.onerror(t)}})),yt=n(((e,t)=>{let{kForOnEventAttribute:n,kListener:r}=ft(),i=Symbol(`kCode`),a=Symbol(`kData`),o=Symbol(`kError`),s=Symbol(`kMessage`),c=Symbol(`kReason`),l=Symbol(`kTarget`),u=Symbol(`kType`),d=Symbol(`kWasClean`);var f=class{constructor(e){this[l]=null,this[u]=e}get target(){return this[l]}get type(){return this[u]}};Object.defineProperty(f.prototype,"target",{enumerable:!0}),Object.defineProperty(f.prototype,"type",{enumerable:!0});var p=class extends f{constructor(e,t={}){super(e),this[i]=t.code===void 0?0:t.code,this[c]=t.reason===void 0?``:t.reason,this[d]=t.wasClean!==void 0&&t.wasClean}get code(){return this[i]}get reason(){return this[c]}get wasClean(){return this[d]}};Object.defineProperty(p.prototype,"code",{enumerable:!0}),Object.defineProperty(p.prototype,"reason",{enumerable:!0}),Object.defineProperty(p.prototype,"wasClean",{enumerable:!0});var m=class extends f{constructor(e,t={}){super(e),this[o]=t.error===void 0?null:t.error,this[s]=t.message===void 0?``:t.message}get error(){return this[o]}get message(){return this[s]}};Object.defineProperty(m.prototype,"error",{enumerable:!0}),Object.defineProperty(m.prototype,"message",{enumerable:!0});var h=class extends f{constructor(e,t={}){super(e),this[a]=t.data===void 0?null:t.data}get data(){return this[a]}};Object.defineProperty(h.prototype,"data",{enumerable:!0}),t.exports={CloseEvent:p,ErrorEvent:m,Event:f,EventTarget:{addEventListener(e,t,i={}){for(let a of this.listeners(e))if(!i[n]&&a[r]===t&&!a[n])return;let a;if(e===`message`)a=function(e,n){let r=new h(`message`,{data:n?e:e.toString()});r[l]=this,g(t,this,r)};else if(e===`close`)a=function(e,n){let r=new p(`close`,{code:e,reason:n.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});r[l]=this,g(t,this,r)};else if(e===`error`)a=function(e){let n=new m(`error`,{error:e,message:e.message});n[l]=this,g(t,this,n)};else if(e===`open`)a=function(){let e=new f(`open`);e[l]=this,g(t,this,e)};else return;a[n]=!!i[n],a[r]=t,i.once?this.once(e,a):this.on(e,a)},removeEventListener(e,t){for(let i of this.listeners(e))if(i[r]===t&&!i[n]){this.removeListener(e,i);break}}},MessageEvent:h};function g(e,t,n){typeof e==`object`&&e.handleEvent?e.handleEvent.call(e,n):e.call(t,n)}})),bt=n(((e,t)=>{let{tokenChars:n}=gt();function r(e,t,n){e[t]===void 0?e[t]=[n]:e[t].push(n)}function i(e){let t=Object.create(null),i=Object.create(null),a=!1,o=!1,s=!1,c,l,u=-1,d=-1,f=-1,p=0;for(;p<e.length;p++)if(d=e.charCodeAt(p),c===void 0){if(f===-1&&n[d]===1)u===-1&&(u=p);else if(p!==0&&(d===32||d===9))f===-1&&u!==-1&&(f=p);else if(d===59||d===44){if(u===-1)throw SyntaxError(`Unexpected character at index ${p}`);f===-1&&(f=p);let n=e.slice(u,f);d===44?(r(t,n,i),i=Object.create(null)):c=n,u=f=-1}else throw SyntaxError(`Unexpected character at index ${p}`)}else if(l===void 0){if(f===-1&&n[d]===1)u===-1&&(u=p);else if(d===32||d===9)f===-1&&u!==-1&&(f=p);else if(d===59||d===44){if(u===-1)throw SyntaxError(`Unexpected character at index ${p}`);f===-1&&(f=p),r(i,e.slice(u,f),!0),d===44&&(r(t,c,i),i=Object.create(null),c=void 0),u=f=-1}else if(d===61&&u!==-1&&f===-1)l=e.slice(u,p),u=f=-1;else throw SyntaxError(`Unexpected character at index ${p}`)}else if(o){if(n[d]!==1)throw SyntaxError(`Unexpected character at index ${p}`);u===-1?u=p:a||=!0,o=!1}else if(s){if(n[d]===1)u===-1&&(u=p);else if(d===34&&u!==-1)s=!1,f=p;else if(d===92)o=!0;else throw SyntaxError(`Unexpected character at index ${p}`)}else if(d===34&&e.charCodeAt(p-1)===61)s=!0;else if(f===-1&&n[d]===1)u===-1&&(u=p);else if(u!==-1&&(d===32||d===9))f===-1&&(f=p);else if(d===59||d===44){if(u===-1)throw SyntaxError(`Unexpected character at index ${p}`);f===-1&&(f=p);let n=e.slice(u,f);a&&=(n=n.replace(/\\/g,``),!1),r(i,l,n),d===44&&(r(t,c,i),i=Object.create(null),c=void 0),l=void 0,u=f=-1}else throw SyntaxError(`Unexpected character at index ${p}`);if(u===-1||s||d===32||d===9)throw SyntaxError(`Unexpected end of input`);f===-1&&(f=p);let m=e.slice(u,f);return c===void 0?r(t,m,i):(l===void 0?r(i,m,!0):a?r(i,l,m.replace(/\\/g,``)):r(i,l,m),r(t,c,i)),t}function a(e){return Object.keys(e).map(t=>{let n=e[t];return Array.isArray(n)||(n=[n]),n.map(e=>[t].concat(Object.keys(e).map(t=>{let n=e[t];return Array.isArray(n)||(n=[n]),n.map(e=>e===!0?t:`${t}=${e}`).join(`; `)})).join(`; `)).join(`, `)}).join(`, `)}t.exports={format:a,parse:i}})),xt=n(((e,n)=>{let r=t(`events`),i=t(`https`),a=t(`http`),o=t(`net`),s=t(`tls`),{randomBytes:c,createHash:l}=t(`crypto`),{Duplex:u,Readable:d}=t(`stream`),{URL:f}=t(`url`),p=ht(),m=_t(),h=vt(),{isBlob:g}=gt(),{BINARY_TYPES:_,CLOSE_TIMEOUT:v,EMPTY_BUFFER:y,GUID:b,kForOnEventAttribute:x,kListener:S,kStatusCode:C,kWebSocket:w,NOOP:T}=ft(),{EventTarget:{addEventListener:E,removeEventListener:D}}=yt(),{format:O,parse:k}=bt(),{toBuffer:A}=pt(),j=Symbol(`kAborted`),M=[8,13],N=[`CONNECTING`,`OPEN`,`CLOSING`,`CLOSED`],P=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;var F=class e extends r{constructor(t,n,r){super(),this._binaryType=_[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=y,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol=``,this._readyState=e.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,t===null?(this._autoPong=r.autoPong,this._closeTimeout=r.closeTimeout,this._isServer=!0):(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,n===void 0?n=[]:Array.isArray(n)||(typeof n==`object`&&n?(r=n,n=[]):n=[n]),I(this,t,n,r))}get binaryType(){return this._binaryType}set binaryType(e){_.includes(e)&&(this._binaryType=e,this._receiver&&(this._receiver._binaryType=e))}get bufferedAmount(){return this._socket?this._socket._writableState.length+this._sender._bufferedBytes:this._bufferedAmount}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(t,n,r){let i=new m({allowSynchronousEvents:r.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxBufferedChunks:r.maxBufferedChunks,maxFragments:r.maxFragments,maxPayload:r.maxPayload,skipUTF8Validation:r.skipUTF8Validation}),a=new h(t,this._extensions,r.generateMask);this._receiver=i,this._sender=a,this._socket=t,i[w]=this,a[w]=this,t[w]=this,i.on(`conclude`,ee),i.on(`drain`,te),i.on(`error`,H),i.on(`message`,re),i.on(`ping`,ie),i.on(`pong`,ae),a.onerror=U,t.setTimeout&&t.setTimeout(0),t.setNoDelay&&t.setNoDelay(),n.length>0&&t.unshift(n),t.on(`close`,ce),t.on(`data`,W),t.on(`end`,le),t.on(`error`,ue),this._readyState=e.OPEN,this.emit(`open`)}emitClose(){if(!this._socket){this._readyState=e.CLOSED,this.emit(`close`,this._closeCode,this._closeMessage);return}this._extensions[p.extensionName]&&this._extensions[p.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=e.CLOSED,this.emit(`close`,this._closeCode,this._closeMessage)}close(t,n){if(this.readyState!==e.CLOSED){if(this.readyState===e.CONNECTING){B(this,this._req,`WebSocket was closed before the connection was established`);return}if(this.readyState===e.CLOSING){this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end();return}this._readyState=e.CLOSING,this._sender.close(t,n,!this._isServer,e=>{e||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())}),se(this)}}pause(){this.readyState!==e.CONNECTING&&this.readyState!==e.CLOSED&&(this._paused=!0,this._socket.pause())}ping(t,n,r){if(this.readyState===e.CONNECTING)throw Error(`WebSocket is not open: readyState 0 (CONNECTING)`);if(typeof t==`function`?(r=t,t=n=void 0):typeof n==`function`&&(r=n,n=void 0),typeof t==`number`&&(t=t.toString()),this.readyState!==e.OPEN){V(this,t,r);return}n===void 0&&(n=!this._isServer),this._sender.ping(t||y,n,r)}pong(t,n,r){if(this.readyState===e.CONNECTING)throw Error(`WebSocket is not open: readyState 0 (CONNECTING)`);if(typeof t==`function`?(r=t,t=n=void 0):typeof n==`function`&&(r=n,n=void 0),typeof t==`number`&&(t=t.toString()),this.readyState!==e.OPEN){V(this,t,r);return}n===void 0&&(n=!this._isServer),this._sender.pong(t||y,n,r)}resume(){this.readyState!==e.CONNECTING&&this.readyState!==e.CLOSED&&(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(t,n,r){if(this.readyState===e.CONNECTING)throw Error(`WebSocket is not open: readyState 0 (CONNECTING)`);if(typeof n==`function`&&(r=n,n={}),typeof t==`number`&&(t=t.toString()),this.readyState!==e.OPEN){V(this,t,r);return}let i={binary:typeof t!=`string`,mask:!this._isServer,compress:!0,fin:!0,...n};this._extensions[p.extensionName]||(i.compress=!1),this._sender.send(t||y,i,r)}terminate(){if(this.readyState!==e.CLOSED){if(this.readyState===e.CONNECTING){B(this,this._req,`WebSocket was closed before the connection was established`);return}this._socket&&(this._readyState=e.CLOSING,this._socket.destroy())}}};Object.defineProperty(F,"CONNECTING",{enumerable:!0,value:N.indexOf(`CONNECTING`)}),Object.defineProperty(F.prototype,"CONNECTING",{enumerable:!0,value:N.indexOf(`CONNECTING`)}),Object.defineProperty(F,"OPEN",{enumerable:!0,value:N.indexOf(`OPEN`)}),Object.defineProperty(F.prototype,"OPEN",{enumerable:!0,value:N.indexOf(`OPEN`)}),Object.defineProperty(F,"CLOSING",{enumerable:!0,value:N.indexOf(`CLOSING`)}),Object.defineProperty(F.prototype,"CLOSING",{enumerable:!0,value:N.indexOf(`CLOSING`)}),Object.defineProperty(F,"CLOSED",{enumerable:!0,value:N.indexOf(`CLOSED`)}),Object.defineProperty(F.prototype,"CLOSED",{enumerable:!0,value:N.indexOf(`CLOSED`)}),[`binaryType`,`bufferedAmount`,`extensions`,`isPaused`,`protocol`,`readyState`,`url`].forEach(e=>{Object.defineProperty(F.prototype,e,{enumerable:!0})}),[`open`,`error`,`close`,`message`].forEach(e=>{Object.defineProperty(F.prototype,`on${e}`,{enumerable:!0,get(){for(let t of this.listeners(e))if(t[x])return t[S];return null},set(t){for(let t of this.listeners(e))if(t[x]){this.removeListener(e,t);break}typeof t==`function`&&this.addEventListener(e,t,{[x]:!0})}})}),F.prototype.addEventListener=E,F.prototype.removeEventListener=D,n.exports=F;function I(e,t,n,r){let o={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:v,protocolVersion:M[1],maxBufferedChunks:262144,maxFragments:16384,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...r,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:`GET`,host:void 0,path:void 0,port:void 0};if(e._autoPong=o.autoPong,e._closeTimeout=o.closeTimeout,!M.includes(o.protocolVersion))throw RangeError(`Unsupported protocol version: ${o.protocolVersion} (supported versions: ${M.join(`, `)})`);let s;if(t instanceof f)s=t;else try{s=new f(t)}catch{throw SyntaxError(`Invalid URL: ${t}`)}s.protocol===`http:`?s.protocol=`ws:`:s.protocol===`https:`&&(s.protocol=`wss:`),e._url=s.href;let u=s.protocol===`wss:`,d=s.protocol===`ws+unix:`,m;if(s.protocol!==`ws:`&&!u&&!d?m=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`:d&&!s.pathname?m=`The URL's pathname is empty`:s.hash&&(m=`The URL contains a fragment identifier`),m){let t=SyntaxError(m);if(e._redirects===0)throw t;L(e,t);return}let h=u?443:80,g=c(16).toString(`base64`),_=u?i.request:a.request,y=new Set,x;if(o.createConnection=o.createConnection||(u?z:R),o.defaultPort=o.defaultPort||h,o.port=s.port||h,o.host=s.hostname.startsWith(`[`)?s.hostname.slice(1,-1):s.hostname,o.headers={...o.headers,"Sec-WebSocket-Version":o.protocolVersion,"Sec-WebSocket-Key":g,Connection:`Upgrade`,Upgrade:`websocket`},o.path=s.pathname+s.search,o.timeout=o.handshakeTimeout,o.perMessageDeflate&&(x=new p({...o.perMessageDeflate,isServer:!1,maxPayload:o.maxPayload}),o.headers[`Sec-WebSocket-Extensions`]=O({[p.extensionName]:x.offer()})),n.length){for(let e of n){if(typeof e!=`string`||!P.test(e)||y.has(e))throw SyntaxError(`An invalid or duplicated subprotocol was specified`);y.add(e)}o.headers[`Sec-WebSocket-Protocol`]=n.join(`,`)}if(o.origin&&(o.protocolVersion<13?o.headers[`Sec-WebSocket-Origin`]=o.origin:o.headers.Origin=o.origin),(s.username||s.password)&&(o.auth=`${s.username}:${s.password}`),d){let e=o.path.split(`:`);o.socketPath=e[0],o.path=e[1]}let S;if(o.followRedirects){if(e._redirects===0){e._originalIpc=d,e._originalSecure=u,e._originalHostOrSocketPath=d?o.socketPath:s.host;let t=r&&r.headers;if(r={...r,headers:{}},t)for(let[e,n]of Object.entries(t))r.headers[e.toLowerCase()]=n}else if(e.listenerCount(`redirect`)===0){let t=d?e._originalIpc?o.socketPath===e._originalHostOrSocketPath:!1:!e._originalIpc&&s.host===e._originalHostOrSocketPath;(!t||e._originalSecure&&!u)&&(delete o.headers.authorization,delete o.headers.cookie,t||delete o.headers.host,o.auth=void 0)}o.auth&&!r.headers.authorization&&(r.headers.authorization=`Basic `+Buffer.from(o.auth).toString(`base64`)),S=e._req=_(o),e._redirects&&e.emit(`redirect`,e.url,S)}else S=e._req=_(o);o.timeout&&S.on(`timeout`,()=>{B(e,S,`Opening handshake has timed out`)}),S.on(`error`,t=>{S===null||S[j]||(S=e._req=null,L(e,t))}),S.on(`response`,i=>{let a=i.headers.location,s=i.statusCode;if(a&&o.followRedirects&&s>=300&&s<400){if(++e._redirects>o.maxRedirects){B(e,S,`Maximum redirects exceeded`);return}S.abort();let i;try{i=new f(a,t)}catch{L(e,SyntaxError(`Invalid URL: ${a}`));return}I(e,i,n,r)}else e.emit(`unexpected-response`,S,i)||B(e,S,`Unexpected server response: ${i.statusCode}`)}),S.on(`upgrade`,(t,n,r)=>{if(e.emit(`upgrade`,t),e.readyState!==F.CONNECTING)return;S=e._req=null;let i=t.headers.upgrade;if(i===void 0||i.toLowerCase()!==`websocket`){B(e,n,`Invalid Upgrade header`);return}let a=l(`sha1`).update(g+b).digest(`base64`);if(t.headers[`sec-websocket-accept`]!==a){B(e,n,`Invalid Sec-WebSocket-Accept header`);return}let s=t.headers[`sec-websocket-protocol`],c;if(s===void 0?y.size&&(c=`Server sent no subprotocol`):y.size?y.has(s)||(c=`Server sent an invalid subprotocol`):c=`Server sent a subprotocol but none was requested`,c){B(e,n,c);return}s&&(e._protocol=s);let u=t.headers[`sec-websocket-extensions`];if(u!==void 0){if(!x){B(e,n,`Server sent a Sec-WebSocket-Extensions header but no extension was requested`);return}let t;try{t=k(u)}catch{B(e,n,`Invalid Sec-WebSocket-Extensions header`);return}let r=Object.keys(t);if(r.length!==1||r[0]!==p.extensionName){B(e,n,`Server indicated an extension that was not requested`);return}try{x.accept(t[p.extensionName])}catch{B(e,n,`Invalid Sec-WebSocket-Extensions header`);return}e._extensions[p.extensionName]=x}e.setSocket(n,r,{allowSynchronousEvents:o.allowSynchronousEvents,generateMask:o.generateMask,maxBufferedChunks:o.maxBufferedChunks,maxFragments:o.maxFragments,maxPayload:o.maxPayload,skipUTF8Validation:o.skipUTF8Validation})}),o.finishRequest?o.finishRequest(S,e):S.end()}function L(e,t){e._readyState=F.CLOSING,e._errorEmitted=!0,e.emit(`error`,t),e.emitClose()}function R(e){return e.path=e.socketPath,o.connect(e)}function z(e){return e.path=void 0,!e.servername&&e.servername!==``&&(e.servername=o.isIP(e.host)?``:e.host),s.connect(e)}function B(e,t,n){e._readyState=F.CLOSING;let r=Error(n);Error.captureStackTrace(r,B),t.setHeader?(t[j]=!0,t.abort(),t.socket&&!t.socket.destroyed&&t.socket.destroy(),process.nextTick(L,e,r)):(t.destroy(r),t.once(`error`,e.emit.bind(e,`error`)),t.once(`close`,e.emitClose.bind(e)))}function V(e,t,n){if(t){let n=g(t)?t.size:A(t).length;e._socket?e._sender._bufferedBytes+=n:e._bufferedAmount+=n}if(n){let t=Error(`WebSocket is not open: readyState ${e.readyState} (${N[e.readyState]})`);process.nextTick(n,t)}}function ee(e,t){let n=this[w];n._closeFrameReceived=!0,n._closeMessage=t,n._closeCode=e,n._socket[w]!==void 0&&(n._socket.removeListener(`data`,W),process.nextTick(oe,n._socket),e===1005?n.close():n.close(e,t))}function te(){let e=this[w];e.isPaused||e._socket.resume()}function H(e){let t=this[w];t._socket[w]!==void 0&&(t._socket.removeListener(`data`,W),process.nextTick(oe,t._socket),t.close(e[C])),t._errorEmitted||(t._errorEmitted=!0,t.emit(`error`,e))}function ne(){this[w].emitClose()}function re(e,t){this[w].emit(`message`,e,t)}function ie(e){let t=this[w];t._autoPong&&t.pong(e,!this._isServer,T),t.emit(`ping`,e)}function ae(e){this[w].emit(`pong`,e)}function oe(e){e.resume()}function U(e){let t=this[w];t.readyState!==F.CLOSED&&(t.readyState===F.OPEN&&(t._readyState=F.CLOSING,se(t)),this._socket.end(),t._errorEmitted||(t._errorEmitted=!0,t.emit(`error`,e)))}function se(e){e._closeTimer=setTimeout(e._socket.destroy.bind(e._socket),e._closeTimeout)}function ce(){let e=this[w];if(this.removeListener(`close`,ce),this.removeListener(`data`,W),this.removeListener(`end`,le),e._readyState=F.CLOSING,!this._readableState.endEmitted&&!e._closeFrameReceived&&!e._receiver._writableState.errorEmitted&&this._readableState.length!==0){let t=this.read(this._readableState.length);e._receiver.write(t)}e._receiver.end(),this[w]=void 0,clearTimeout(e._closeTimer),e._receiver._writableState.finished||e._receiver._writableState.errorEmitted?e.emitClose():(e._receiver.on(`error`,ne),e._receiver.on(`finish`,ne))}function W(e){this[w]._receiver.write(e)||this.pause()}function le(){let e=this[w];e._readyState=F.CLOSING,e._receiver.end(),this.end()}function ue(){let e=this[w];this.removeListener(`error`,ue),this.on(`error`,T),e&&(e._readyState=F.CLOSING,this.destroy())}})),St=n(((e,n)=>{xt();let{Duplex:r}=t(`stream`);function i(e){e.emit(`close`)}function a(){!this.destroyed&&this._writableState.finished&&this.destroy()}function o(e){this.removeListener(`error`,o),this.destroy(),this.listenerCount(`error`)===0&&this.emit(`error`,e)}function s(e,t){let n=!0,s=new r({...t,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return e.on(`message`,function(t,n){let r=!n&&s._readableState.objectMode?t.toString():t;s.push(r)||e.pause()}),e.once(`error`,function(e){s.destroyed||(n=!1,s.destroy(e))}),e.once(`close`,function(){s.destroyed||s.push(null)}),s._destroy=function(t,r){if(e.readyState===e.CLOSED){r(t),process.nextTick(i,s);return}let a=!1;e.once(`error`,function(e){a=!0,r(e)}),e.once(`close`,function(){a||r(t),process.nextTick(i,s)}),n&&e.terminate()},s._final=function(t){if(e.readyState===e.CONNECTING){e.once(`open`,function(){s._final(t)});return}e._socket!==null&&(e._socket._writableState.finished?(t(),s._readableState.endEmitted&&s.destroy()):(e._socket.once(`finish`,function(){t()}),e.close()))},s._read=function(){e.isPaused&&e.resume()},s._write=function(t,n,r){if(e.readyState===e.CONNECTING){e.once(`open`,function(){s._write(t,n,r)});return}e.send(t,r)},s.on(`end`,a),s.on(`error`,o),s}n.exports=s})),Ct=n(((e,t)=>{let{tokenChars:n}=gt();function r(e){let t=new Set,r=-1,i=-1,a=0;for(;a<e.length;a++){let o=e.charCodeAt(a);if(i===-1&&n[o]===1)r===-1&&(r=a);else if(a!==0&&(o===32||o===9))i===-1&&r!==-1&&(i=a);else if(o===44){if(r===-1)throw SyntaxError(`Unexpected character at index ${a}`);i===-1&&(i=a);let n=e.slice(r,i);if(t.has(n))throw SyntaxError(`The "${n}" subprotocol is duplicated`);t.add(n),r=i=-1}else throw SyntaxError(`Unexpected character at index ${a}`)}if(r===-1||i!==-1)throw SyntaxError(`Unexpected end of input`);let o=e.slice(r,a);if(t.has(o))throw SyntaxError(`The "${o}" subprotocol is duplicated`);return t.add(o),t}t.exports={parse:r}})),wt=n(((e,n)=>{let r=t(`events`),i=t(`http`),{Duplex:a}=t(`stream`),{createHash:o}=t(`crypto`),s=bt(),c=ht(),l=Ct(),u=xt(),{CLOSE_TIMEOUT:d,GUID:f,kWebSocket:p}=ft(),m=/^[+/0-9A-Za-z]{22}==$/;n.exports=class extends r{constructor(e,t){if(super(),e={allowSynchronousEvents:!0,autoPong:!0,maxBufferedChunks:262144,maxFragments:16384,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:d,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:u,...e},e.port==null&&!e.server&&!e.noServer||e.port!=null&&(e.server||e.noServer)||e.server&&e.noServer)throw TypeError(`One and only one of the "port", "server", or "noServer" options must be specified`);if(e.port==null?e.server&&(this._server=e.server):(this._server=i.createServer((e,t)=>{let n=i.STATUS_CODES[426];t.writeHead(426,{"Content-Length":n.length,"Content-Type":`text/plain`}),t.end(n)}),this._server.listen(e.port,e.host,e.backlog,t)),this._server){let e=this.emit.bind(this,`connection`);this._removeListeners=h(this._server,{listening:this.emit.bind(this,`listening`),error:this.emit.bind(this,`error`),upgrade:(t,n,r)=>{this.handleUpgrade(t,n,r,e)}})}e.perMessageDeflate===!0&&(e.perMessageDeflate={}),e.clientTracking&&(this.clients=new Set,this._shouldEmitClose=!1),this.options=e,this._state=0}address(){if(this.options.noServer)throw Error(`The server is operating in "noServer" mode`);return this._server?this._server.address():null}close(e){if(this._state===2){e&&this.once(`close`,()=>{e(Error(`The server is not running`))}),process.nextTick(g,this);return}if(e&&this.once(`close`,e),this._state!==1){if(this._state=1,this.options.noServer||this.options.server)this._server&&(this._removeListeners(),this._removeListeners=this._server=null),this.clients&&this.clients.size?this._shouldEmitClose=!0:process.nextTick(g,this);else{let e=this._server;this._removeListeners(),this._removeListeners=this._server=null,e.close(()=>{g(this)})}}}shouldHandle(e){if(this.options.path){let t=e.url.indexOf(`?`);if((t===-1?e.url:e.url.slice(0,t))!==this.options.path)return!1}return!0}handleUpgrade(e,t,n,r){t.on(`error`,_);let i=e.headers[`sec-websocket-key`],a=e.headers.upgrade,o=+e.headers[`sec-websocket-version`];if(e.method!==`GET`){y(this,e,t,405,`Invalid HTTP method`);return}if(a===void 0||a.toLowerCase()!==`websocket`){y(this,e,t,400,`Invalid Upgrade header`);return}if(i===void 0||!m.test(i)){y(this,e,t,400,`Missing or invalid Sec-WebSocket-Key header`);return}if(o!==13&&o!==8){y(this,e,t,400,`Missing or invalid Sec-WebSocket-Version header`,{"Sec-WebSocket-Version":`13, 8`});return}if(!this.shouldHandle(e)){v(t,400);return}let u=e.headers[`sec-websocket-protocol`],d=new Set;if(u!==void 0)try{d=l.parse(u)}catch{y(this,e,t,400,`Invalid Sec-WebSocket-Protocol header`);return}let f=e.headers[`sec-websocket-extensions`],p={};if(this.options.perMessageDeflate&&f!==void 0){let n=new c({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let e=s.parse(f);e[c.extensionName]&&(n.accept(e[c.extensionName]),p[c.extensionName]=n)}catch{y(this,e,t,400,`Invalid or unacceptable Sec-WebSocket-Extensions header`);return}}if(this.options.verifyClient){let a={origin:e.headers[`${o===8?`sec-websocket-origin`:`origin`}`],secure:!!(e.socket.authorized||e.socket.encrypted),req:e};if(this.options.verifyClient.length===2){this.options.verifyClient(a,(a,o,s,c)=>{if(!a)return v(t,o||401,s,c);this.completeUpgrade(p,i,d,e,t,n,r)});return}if(!this.options.verifyClient(a))return v(t,401)}this.completeUpgrade(p,i,d,e,t,n,r)}completeUpgrade(e,t,n,r,i,a,l){if(!i.readable||!i.writable)return i.destroy();if(i[p])throw Error(`server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration`);if(this._state>0)return v(i,503);let u=[`HTTP/1.1 101 Switching Protocols`,`Upgrade: websocket`,`Connection: Upgrade`,`Sec-WebSocket-Accept: ${o(`sha1`).update(t+f).digest(`base64`)}`],d=new this.options.WebSocket(null,void 0,this.options);if(n.size){let e=this.options.handleProtocols?this.options.handleProtocols(n,r):n.values().next().value;e&&(u.push(`Sec-WebSocket-Protocol: ${e}`),d._protocol=e)}if(e[c.extensionName]){let t=e[c.extensionName].params,n=s.format({[c.extensionName]:[t]});u.push(`Sec-WebSocket-Extensions: ${n}`),d._extensions=e}this.emit(`headers`,u,r),i.write(u.concat(`\r
|
|
10
23
|
`).join(`\r
|
|
11
24
|
`)),i.removeListener(`error`,_),d.setSocket(i,a,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxBufferedChunks:this.options.maxBufferedChunks,maxFragments:this.options.maxFragments,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients&&(this.clients.add(d),d.on(`close`,()=>{this.clients.delete(d),this._shouldEmitClose&&!this.clients.size&&process.nextTick(g,this)})),l(d,r)}};function h(e,t){for(let n of Object.keys(t))e.on(n,t[n]);return function(){for(let n of Object.keys(t))e.removeListener(n,t[n])}}function g(e){e._state=2,e.emit(`close`)}function _(){this.destroy()}function v(e,t,n,r){n||=i.STATUS_CODES[t],r={Connection:`close`,"Content-Type":`text/html`,"Content-Length":Buffer.byteLength(n),...r},e.once(`finish`,e.destroy),e.end(`HTTP/1.1 ${t} ${i.STATUS_CODES[t]}\r\n`+Object.keys(r).map(e=>`${e}: ${r[e]}`).join(`\r
|
|
12
25
|
`)+`\r
|
|
13
26
|
\r
|
|
14
|
-
`+n)}function y(e,t,n,r,i,a){if(e.listenerCount(`wsClientError`)){let r=Error(i);Error.captureStackTrace(r,y),e.emit(`wsClientError`,r,n,t)}else v(n,r,i,a)}}));_e(),Z(),J(),X(),me(),ve();var Q=e(ge(),1);ye();async function be(e,t,n){for(let r=0;r<=3;r++){let i=await N.fetch(e,{method:`GET`,headers:{Authorization:`Bearer ${t}`}});if(!i.ok){let e=await i.text();if(i.status>=500&&i.status<600&&r<3)continue;throw Error(`Download failed: ${i.status} ${e}`)}if(!i.body)throw Error(`Download failed: response body is missing`);await o.promises.mkdir(d.dirname(n),{recursive:!0}),await h(c.fromWeb(i.body),o.createWriteStream(n));return}}async function xe(e,t,n,r,i){return(i?.mode??`singleton`)===`multiplexed`?Ce(e,t,n,r,i):Se(e,t,n,r,i)}async function Se(e,t,n,r,i){let a=i?.maxReconnectAttempts??6,o=i?.reconnectDelay??1e3,s=i?.maxReconnectDelay??3e4,c=i?.logLevel??`info`,u={debug:(...e)=>{c===`debug`&&console.log(`[Tunnel]`,...e)},info:(...e)=>{(c===`info`||c===`debug`)&&console.log(`[Tunnel]`,...e)},warn:(...e)=>{(c===`warn`||c===`info`||c===`debug`)&&console.warn(`[Tunnel]`,...e)},error:(...e)=>{c!==`none`&&console.error(`[Tunnel]`,...e)}};return new Promise((i,c)=>{let d=l.createServer(),p,m,h,g=0,_=!1,v,y=`connecting`,b,x,S=new Set,C=e=>{y!==e&&(y=e,u.debug(`Connection state changed to: ${e}`),S.forEach(t=>{try{t(e)}catch(e){u.error(`Error in connection state callback:`,e)}}))},w=()=>{h&&=(clearTimeout(h),void 0),m&&=(clearInterval(m),void 0),p&&=(p.removeAllListeners(),(p.readyState===Q.default.OPEN||p.readyState===Q.default.CONNECTING)&&p.close(1e3,`close`),void 0)},T=()=>{_=!0,w(),C(`disconnected`),v&&!v.destroyed&&v.destroy(),d.listening&&d.close()},E=()=>{if(_){u.debug(`Skipping reconnection (intentional disconnect)`);return}if($(x??``)){u.error(`Skipping reconnection (non-retryable error): ${x}`);return}if(!v||v.destroyed){u.debug(`Skipping reconnection (TCP socket closed)`);return}if(g>=a){u.error(`Max reconnection attempts (${a}) reached. Closing tunnel.`,x?`Last error: ${x}`:``),T();return}let e=Math.min(o*2**g,s);g++,u.debug(`Scheduling reconnection attempt ${g} in ${e}ms...`),C(`reconnecting`),h=setTimeout(()=>{u.debug(`Attempting to reconnect (attempt ${g})...`),D()},e)},D=()=>{if(!v||v.destroyed){u.error(`Cannot setup WebSocket: TCP socket is closed`);return}w(),C(`connecting`);let n=new URL(e);b&&n.searchParams.set(`sessionId`,b);let r=N.getWebSocketAgent(n.toString());p=new Q.default(n.toString(),{headers:{Authorization:`Bearer ${t}`},...r?{agent:r}:{},perMessageDeflate:!1}),p.on(`error`,e=>{let t=e.message||String(e);x=t,u.debug(`WebSocket error:`,t)}),p.on(`close`,(e,t)=>{m&&=(clearInterval(m),void 0);let n=!_&&!$(x??``)&&y!==`disconnected`;C(`disconnected`),u.debug(`WebSocket disconnected (code=${e}, reason=${t.toString()})`),v&&!v.destroyed&&!v.isPaused()&&(u.debug(`Pausing TCP socket (applying backpressure)`),v.pause()),n&&v&&!v.destroyed?E():$(x??``)&&(u.error(`Closing tunnel due to non-retryable error: ${x}`),T())}),p.on(`open`,()=>{let e=p;u.debug(`WebSocket connected`),g=0,x=void 0,C(`connected`),m=setInterval(()=>{e.readyState===Q.default.OPEN&&e.ping()},3e4),v&&v.isPaused()&&(u.debug(`Resuming TCP socket (releasing backpressure)`),v.resume());let t=t=>{e.readyState===Q.default.OPEN&&e.send(t)};v.removeListener(`data`,t),v.on(`data`,t),e.on(`message`,e=>{v&&!v.destroyed&&v.write(e)})})};d.once(`error`,e=>{T(),c(Error(`TCP server error: ${e.message}`))});let O=()=>y,k=e=>(S.add(e),()=>{S.delete(e)});d.once(`listening`,()=>{let e=d.address();if(!e||typeof e==`string`)return T(),c(Error(`Failed to obtain listening address`));i({address:e,close:T,getConnectionState:O,onConnectionStateChange:k})});let A=()=>{w(),C(`disconnected`),v&&!v.destroyed&&(v.destroy(),v=void 0),g=0,_=!1,b=void 0,x=void 0,u.debug(`Connection cleaned up, ready for new TCP connection`)};d.on(`connection`,e=>{if(v&&!v.destroyed){u.debug(`Rejecting new TCP connection - already have an active connection`),e.destroy();return}b=f.randomUUID(),u.debug(`TCP client connected`,`sessionId`,b),v=e,v.on(`close`,()=>{u.debug(`TCP socket closed by client`),A()}),v.on(`error`,e=>{u.error(`TCP socket error:`,e),A()}),D()}),d.listen(r,n)})}async function Ce(e,t,n,r,i){let a=i?.logLevel??`info`,o={debug:(...e)=>{a===`debug`&&console.log(`[Tunnel:Mux]`,...e)},info:(...e)=>{(a===`info`||a===`debug`)&&console.log(`[Tunnel:Mux]`,...e)},warn:(...e)=>{(a===`warn`||a===`info`||a===`debug`)&&console.warn(`[Tunnel:Mux]`,...e)},error:(...e)=>{a!==`none`&&console.error(`[Tunnel:Mux]`,...e)}};return new Promise((i,a)=>{let s=l.createServer(),c=new Map,u=1,d,f,p=`connecting`,m=new Set,h=e=>{p!==e&&(p=e,o.debug(`Connection state changed to: ${e}`),m.forEach(t=>{try{t(e)}catch(e){o.error(`Error in connection state callback:`,e)}}))},g=()=>{f&&=(clearInterval(f),void 0),d&&=(d.removeAllListeners(),(d.readyState===Q.default.OPEN||d.readyState===Q.default.CONNECTING)&&d.close(1e3,`close`),void 0)},_=()=>{for(let[e,t]of c)o.debug(`Closing TCP connection ${e}`),t.destroyed||t.destroy();c.clear()},v=()=>{g(),_(),h(`disconnected`),s.listening&&s.close()},y=e=>{if(d&&d.readyState===Q.default.OPEN){let t=we(e);d.send(t),o.debug(`Sent close signal for connection ${e}`)}},b=e=>{let t=c.get(e);t&&(t.destroyed||t.destroy(),c.delete(e),o.debug(`Removed connection ${e}`))},x=()=>new Promise((n,r)=>{g(),h(`connecting`);let i=new URL(e);i.searchParams.set(`mode`,`multiplexed`),o.debug(`Connecting WebSocket to: ${i.toString()}`);let a=N.getWebSocketAgent(i.toString());d=new Q.default(i.toString(),{headers:{Authorization:`Bearer ${t}`},...a?{agent:a}:{},perMessageDeflate:!1}),d.on(`error`,e=>{let t=e.message||String(e);o.error(`WebSocket error:`,t,e.code||``),r(e)}),d.on(`close`,(e,t)=>{f&&=(clearInterval(f),void 0),h(`disconnected`),o.debug(`WebSocket disconnected (code=${e}, reason=${t.toString()})`),_()}),d.on(`open`,()=>{let e=d;o.debug(`WebSocket connected`),h(`connected`),f=setInterval(()=>{e.readyState===Q.default.OPEN&&e.ping()},3e4),e.on(`message`,e=>{let t=e;if(o.debug(`WS→TCP raw message: ${t.length} bytes`),t.length<4){o.error(`Received binary frame shorter than 4 bytes; dropping`);return}let n=Te(t),r=t.subarray(4);if(r.length===0){o.debug(`Received close signal for connection ${n}`),b(n);return}o.debug(`WS→TCP [conn=${n}] ${r.length} bytes: ${r.subarray(0,Math.min(200,r.length)).toString(`utf8`).replace(/[\x00-\x1f]/g,`.`)}`);let i=c.get(n);i&&!i.destroyed?i.write(r):o.debug(`Received data for unknown/closed connection ${n}`)}),n()})});s.once(`error`,e=>{v(),a(Error(`TCP server error: ${e.message}`))});let S=()=>p,C=e=>(m.add(e),()=>{m.delete(e)});s.once(`listening`,async()=>{let e=s.address();if(!e||typeof e==`string`)return v(),a(Error(`Failed to obtain listening address`));o.debug(`Multiplexed tunnel listening on ${e.address}:${e.port}`);try{await x(),o.debug(`WebSocket ready, tunnel fully initialized`),i({address:e,close:v,getConnectionState:S,onConnectionStateChange:C})}catch(e){v(),a(Error(`Failed to establish WebSocket connection: ${e}`))}}),s.on(`connection`,e=>{let t=u++;u>4294967295&&(u=1),c.set(t,e),o.debug(`New TCP connection ${t} from ${e.remoteAddress}:${e.remotePort}, WS state=${d?.readyState}, total connections=${c.size}`),e.on(`data`,e=>{if(d&&d.readyState===Q.default.OPEN){let n=we(t),r=Buffer.concat([n,e]);o.debug(`TCP→WS [conn=${t}] ${e.length} bytes: ${e.subarray(0,Math.min(200,e.length)).toString(`utf8`).replace(/[\x00-\x1f]/g,`.`)}`),d.send(r,e=>{e&&o.error(`TCP→WS [conn=${t}] send error: ${e.message}`)})}else o.debug(`TCP→WS [conn=${t}] WS not open (state=${d?.readyState}), dropping ${e.length} bytes`)}),e.on(`close`,()=>{o.debug(`TCP connection ${t} closed by client`),y(t),c.delete(t)}),e.on(`error`,e=>{o.error(`TCP connection ${t} error:`,e),y(t),c.delete(t)})}),s.listen(r,n)})}const $=e=>{let t=e.match(/Unexpected server response: (\d+)/);if(t&&t[1]){let e=parseInt(t[1],10);return e>=400&&e<500}return!1};function we(e){let t=Buffer.alloc(4);return t.writeUInt32BE(e,0),t}function Te(e){if(e.length<4)throw Error(`Header must be at least 4 bytes`);return e.readUInt32BE(0)}function Ee(e){let t=new URL(e);return t.protocol=t.protocol===`https:`?`wss:`:`ws:`,t.search=``,t.hash=``,t.pathname=`${t.pathname.replace(/\/$/,``)}/ws`,t.toString().replace(/\/$/,``)}function De(e){return`${e}/files?path=%2Fdata%2Flocal%2Ftmp%2Frecordings%2Fvideo_recording.mp4`}var Oe;(function(e){e[e.Q5=5]=`Q5`,e[e.Q6=6]=`Q6`,e[e.Q7=7]=`Q7`,e[e.Q8=8]=`Q8`,e[e.Q9=9]=`Q9`,e[e.Q10=10]=`Q10`})(Oe||={});async function ke(e){let t=`${Ee(e.apiUrl)}?token=${e.token}`,n=e.apiUrl,r=e.logLevel??`info`,a=e.maxReconnectAttempts??6,o=e.reconnectDelay??1e3,s=e.maxReconnectDelay??3e4,c,l=`connecting`,u=0,d,f=!1,p,m=new Map,h=new Map,g=new Set,_={debug:(...e)=>{r===`debug`&&console.log(`[Endpoint]`,...e)},info:(...e)=>{(r===`info`||r===`debug`)&&console.log(`[Endpoint]`,...e)},warn:(...e)=>{(r===`warn`||r===`info`||r===`debug`)&&console.warn(`[Endpoint]`,...e)},error:(...e)=>{r!==`none`&&console.error(`[Endpoint]`,...e)}},v=e=>{l!==e&&(l=e,_.debug(`Connection state changed to: ${e}`),g.forEach(t=>{try{t(e)}catch(e){_.error(`Error in connection state callback:`,e)}}))},y=e=>{m.forEach(t=>{clearTimeout(t.timeout),t.reject(Error(e))}),m.clear(),h.forEach(t=>{t.forEach(t=>{clearTimeout(t.timeout),t.reject(Error(e))})}),h.clear()},b=()=>{d&&=(clearTimeout(d),void 0),x&&=(clearInterval(x),void 0),c&&=(c.removeAllListeners(),(c.readyState===Q.default.OPEN||c.readyState===Q.default.CONNECTING)&&c.close(),void 0)},x,S=0,C=Math.random().toString(36).substring(2,15)+Math.random().toString(36).substring(2,15);return new Promise((w,T)=>{let E=!1,D=e=>(S+=1,`${e}-${Date.now()}-${S}`),O=(e,t)=>{let n=m.get(e);if(!n){_.debug(`Received response for unknown/already-settled request: ${e}`);return}clearTimeout(n.timeout),m.delete(e),n.resolve(t)},k=(e,t)=>{let n=m.get(e);if(!n){_.debug(`Received error for unknown/already-settled request: ${e}`);return}clearTimeout(n.timeout),m.delete(e),n.reject(t)},A=e=>{if(`message`in e&&typeof e.message==`string`)return e.message;if(`error`in e&&e.error&&typeof e.error==`object`){let t=e.error;return typeof t.message==`string`&&t.message?t.message:typeof t.code==`string`&&t.code?t.code:`Server returned ${String(e.type)} with an error payload but no error message/code`}},j=e=>{if(!(`type`in e)||typeof e.type!=`string`)return!1;switch(e.type){case`screenshotResult`:case`getElementTreeResult`:case`findElementResult`:case`tapResult`:case`setTextResult`:case`pressKeyResult`:case`scrollScreenResult`:case`scrollElementResult`:case`openUrlResult`:case`startRecordingResult`:case`stopRecordingResult`:return`id`in e&&typeof e.id==`string`;default:return!1}},M=async(e,t,n=3e4)=>{if(!c||c.readyState!==Q.default.OPEN)return Promise.reject(Error(`WebSocket is not connected or connection is not open.`));let r=D(`ts-client`),i=Object.keys(t).length>0?{type:e,id:r,...t,payload:t}:{type:e,id:r};return new Promise((t,a)=>{let o=setTimeout(()=>{m.has(r)&&(m.delete(r),a(Error(`Request ${e} timed out`)))},n);m.set(r,{resolve:e=>t(e),reject:e=>a(e),timeout:o}),c.send(JSON.stringify(i),e=>{e&&(clearTimeout(o),m.delete(r),a(e))})})},P=()=>{if(f){_.debug(`Skipping reconnection (intentional disconnect)`);return}if($(p??``)){_.debug(`Skipping reconnection (non-retryable error)`);return}if(u>=a){_.error(`Max reconnection attempts (${a}) reached. Giving up.`,p?`Last error: ${p}`:``),v(`disconnected`);return}let e=Math.min(o*2**u,s);u++,_.debug(`Scheduling reconnection attempt ${u} in ${e}ms...`),v(`reconnecting`),d=setTimeout(()=>{_.debug(`Attempting to reconnect (attempt ${u})...`),F()},e)},F=()=>{b(),v(`connecting`);let e=N.getWebSocketAgent(t);c=new Q.default(t,e?{agent:e}:{}),c.on(`message`,e=>{let t;try{t=JSON.parse(e.toString())}catch(t){_.error({data:e,error:t},`Failed to parse JSON message`);return}switch(t.type){case`screenshot`:{if(!(`dataUri`in t)||typeof t.dataUri!=`string`||!(`id`in t)){_.warn(`Received invalid screenshot message:`,t);break}let e=t;_.debug(`Received screenshot data URI for request ${e.id}.`),O(e.id,{dataUri:e.dataUri});break}case`screenshotResult`:{let e=t,n=A(e);if(n){k(e.id,Error(n));break}let r=typeof e.payload?.dataUri==`string`?e.payload.dataUri:``;if(!r){k(e.id,Error(`Received screenshotResult without payload.dataUri`));break}O(e.id,{dataUri:r});break}case`screenshotError`:{if(!(`message`in t)||!(`id`in t)){_.warn(`Received invalid screenshot error message:`,t);break}let e=t;_.error(`Server reported an error capturing screenshot for request ${e.id}:`,e.message),k(e.id,Error(e.message));break}case`assetResult`:{_.debug(`Received assetResult:`,t);let e=t.url,n=h.get(e);if(!n||n.length===0){_.warn(`Received assetResult for unknown or already handled url: ${t.url}`);break}let r=n.shift();if(n.length===0?h.delete(e):h.set(e,n),clearTimeout(r.timeout),t.result===`success`){_.debug(`Asset result is success`),r.resolve();break}let i=typeof t.message==`string`&&t.message?t.message:`Asset processing failed: ${JSON.stringify(t)}`;_.debug(`Asset result is failure`,i),r.reject(Error(i));break}default:if(j(t)){let e=A(t);e?k(t.id,Error(e)):O(t.id,t.payload??t);break}_.warn(`Received unexpected message type: ${t.type}`)}}),c.on(`error`,e=>{let t=e.message;p=t,_.debug(`WebSocket error:`,t),!E&&(c?.readyState===Q.default.CONNECTING||c?.readyState===Q.default.OPEN)&&T(e)}),c.on(`close`,()=>{x&&=(clearInterval(x),void 0);let e=!f&&!$(p??``)&&l!==`disconnected`;v(`disconnected`),_.debug(`Disconnected from server.`),y(`Connection closed`),e?P():$(p??``)&&(_.error(`Closing connection due to non-retryable error: ${p}`),b(),v(`disconnected`),y(`Non-retryable error`),_.debug(`Non-retryable error. Closing connection.`))}),c.on(`open`,()=>{_.debug(`Connected to ${t}`),u=0,p=void 0,v(`connected`),x=setInterval(()=>{c&&c.readyState===Q.default.OPEN&&c.ping()},3e4),E||(E=!0,w({screenshot:I,getElementTree:L,findElement:R,tap:ee,setText:z,pressKey:B,scrollScreen:te,scrollElement:ne,openUrl:re,startRecording:V,stopRecording:H,keepAlive:U,disconnect:ie,startAdbTunnel:oe,sendAsset:se,getConnectionState:W,onConnectionStateChange:ae}))})},I=async()=>M(`screenshot`,{}),L=async()=>{let e=await M(`getElementTree`,{});return{xml:typeof e.xml==`string`?e.xml:``,nodes:Array.isArray(e.nodes)?e.nodes:[]}},R=async(e,t=20)=>{let n=await M(`findElement`,{selector:e,limit:t}),r=Array.isArray(n.elements)?n.elements:[];return{elements:r,count:typeof n.count==`number`?n.count:r.length}},ee=async e=>{let t=await M(`tap`,e);return{x:Number(t.x??0),y:Number(t.y??0)}},z=async(e,t)=>{let n={text:t};e?.selector&&(n.selector=e.selector),typeof e?.x==`number`&&(n.x=e.x),typeof e?.y==`number`&&(n.y=e.y);let r=await M(`setText`,n);return{textLength:Number(r.textLength??t.length)}},B=async(e,t)=>{let n={keyName:e,...t?{modifiers:t}:{}},r=await M(`pressKey`,n);return{key:typeof r.key==`string`?r.key:String(e)}},te=async(e,t=6)=>await M(`scrollScreen`,{direction:e,amount:t}),ne=async(e,t,n=6)=>await M(`scrollElement`,{...e,direction:t,amount:n}),re=async e=>{let t=await M(`openUrl`,{url:e});return{url:typeof t.url==`string`?t.url:e}},V=async e=>{let t={};if(e?.quality!==void 0){if(!Number.isInteger(e.quality)||e.quality<5||e.quality>10)throw Error(`quality must be one of: 5, 6, 7, 8, 9, 10`);t.quality=e.quality}await M(`startRecording`,t)},H=async t=>{let r={};t.presignedUrl&&(r.upload={presignedUrl:t.presignedUrl}),await M(`stopRecording`,r);let i=De(n);return t.localPath&&await be(i,e.token,t.localPath),i},U=()=>{!c||c.readyState!==Q.default.OPEN||c.send(JSON.stringify({type:`keepAlive`,sessionId:C}))},ie=()=>{f=!0,b(),v(`disconnected`),y(`Intentional disconnect`),_.debug(`Intentionally disconnected from WebSocket.`)},W=()=>l,ae=e=>(g.add(e),()=>{g.delete(e)}),oe=async()=>{if(!e.adbUrl)throw Error(`adbUrl is required to start an ADB tunnel.`);let t=await xe(e.adbUrl,e.token,`127.0.0.1`,0,{maxReconnectAttempts:a,reconnectDelay:o,maxReconnectDelay:s,logLevel:r});try{await new Promise((n,r)=>{i(`${e.adbPath??`adb`} connect ${t.address.address}:${t.address.port}`,e=>{if(e)return r(e);n()})}),_.debug(`ADB connected on ${t.address.address}`)}catch(e){throw t.close(),e}return t},se=async(e,t)=>{if(!c||c.readyState!==Q.default.OPEN)return Promise.reject(Error(`WebSocket is not connected or connection is not open.`));let n={type:`asset`,url:e};return new Promise((r,i)=>{let a,o=setTimeout(()=>{let t=h.get(e);if(!t)return;let n=t.indexOf(a);n>=0&&(t.splice(n,1),i(Error(`Request asset timed out for url: ${e}`))),t.length===0?h.delete(e):h.set(e,t)},t??12e4);a={resolve:r,reject:e=>i(e),timeout:o};let s=h.get(e)??[];s.push(a),h.set(e,s),c.send(JSON.stringify(n),t=>{if(t){clearTimeout(o);let n=h.get(e)??[],r=n.indexOf(a);r>=0&&n.splice(r,1),n.length===0?h.delete(e):h.set(e,n),_.error(`Failed to send asset request:`,t),i(t)}})})};F()})}function Ae(e){return`${e}/files?name=recording.mp4`}var je;(function(e){e[e.Q5=5]=`Q5`,e[e.Q6=6]=`Q6`,e[e.Q7=7]=`Q7`,e[e.Q8=8]=`Q8`,e[e.Q9=9]=`Q9`,e[e.Q10=10]=`Q10`})(je||={});var Me=class extends a{get isRunning(){return!this.completed}constructor(e,{encoding:t=`utf-8`}={}){super(),this.stdoutChunks=[],this.stderrChunks=[],this.stdoutLineBuffer=``,this.stderrLineBuffer=``,this.exitCodeValue=null,this.completed=!1,this.waitPromise=null,this.stopCallback=null,this.stopCallback=e,this.encoding=t}on(e,t){return super.on(e,t)}once(e,t){return super.once(e,t)}off(e,t){return super.off(e,t)}wait(){return this.waitPromise||=new Promise((e,t)=>{if(this.completed){e({code:this.exitCodeValue,stdout:Buffer.concat(this.stdoutChunks).toString(this.encoding),stderr:Buffer.concat(this.stderrChunks).toString(this.encoding)});return}this.once(`exit`,t=>{e({code:t,stdout:Buffer.concat(this.stdoutChunks).toString(this.encoding),stderr:Buffer.concat(this.stderrChunks).toString(this.encoding)})}),this.once(`error`,e=>{t(e)})}),this.waitPromise}stop(){this.stopCallback&&this.stopCallback()}_handleStdout(e){this.stdoutChunks.push(e),this.emit(`stdout`,e),this.stdoutLineBuffer+=e.toString(this.encoding);let t=this.stdoutLineBuffer.split(`
|
|
27
|
+
`+n)}function y(e,t,n,r,i,a){if(e.listenerCount(`wsClientError`)){let r=Error(i);Error.captureStackTrace(r,y),e.emit(`wsClientError`,r,n,t)}else v(n,r,i,a)}}));St(),bt(),ht(),_t(),vt(),Ct();var J=e(xt(),1);wt();async function Tt(e,t,n,r,i){return(i?.mode??`singleton`)===`multiplexed`?Ot(e,t,n,r,i):Dt(e,t,n,r,i)}async function Et(e,t,n){At(n.localPort,`localPort`,1,65535);let r=n.localHost??`127.0.0.1`,i=n.localPort,a=n.logLevel??`info`,o=n.maxConnections??64,s=n.maxPendingBytesPerConnection??16777216,c=n.maxBufferedBytes??4194304,l=c/4,u=n.connectTimeoutMs??1e4,d={debug:(...e)=>{a===`debug`&&console.log(`[ReverseTunnel]`,...e)},info:(...e)=>{(a===`info`||a===`debug`)&&console.log(`[ReverseTunnel]`,...e)},warn:(...e)=>{(a===`warn`||a===`info`||a===`debug`)&&console.warn(`[ReverseTunnel]`,...e)},error:(...e)=>{a!==`none`&&console.error(`[ReverseTunnel]`,...e)}};return new Promise((n,a)=>{let f=new Map,m=new Set,h=new Map,g=new Map,_=new Map,v=new Map,y=new Set,b,x,S=!1,C=`connecting`,w=!1,T,E=!1,D=e=>{C!==e&&(C=e,d.debug(`Connection state changed to: ${e}`),y.forEach(t=>{try{t(e)}catch(e){d.error(`Error in connection state callback:`,e)}}))},O=e=>{b&&b.readyState===J.default.OPEN&&b.send(jt(e),()=>A())},k=()=>{if(!E){E=!0,d.debug(`WebSocket send buffer full, pausing local reads`);for(let e of f.values())e.destroyed||e.pause()}},A=()=>{if(E&&!(!b||b.bufferedAmount>=l)){E=!1,d.debug(`WebSocket send buffer drained, resuming local reads`);for(let e of f.values())e.destroyed||e.resume()}},j=e=>{let t=v.get(e);t&&clearTimeout(t);let n=setTimeout(()=>{v.delete(e)},3e4);n.unref(),v.set(e,n)},M=(e,t,n=!1)=>{let r=f.get(e),i=_.get(e);f.delete(e),m.delete(e),h.delete(e),g.delete(e),_.delete(e),j(e),i&&clearTimeout(i),t&&O(e),r&&!r.destroyed&&(n?(r.end(),setTimeout(()=>{r.destroyed||r.destroy()},1e3).unref()):r.destroy())},N=()=>{for(let e of Array.from(f.keys()))M(e,!1);E=!1,f.clear(),m.clear(),h.clear(),g.clear();for(let e of v.values())clearTimeout(e);v.clear()},P=()=>{x&&=(clearInterval(x),void 0),b&&=(b.removeAllListeners(),(b.readyState===J.default.OPEN||b.readyState===J.default.CONNECTING)&&b.close(1e3,`close`),void 0)},F=()=>{S=!0,P(),N(),D(`disconnected`)},I=()=>C,L=e=>(y.add(e),()=>{y.delete(e)}),R=e=>{T=e,w=!0,n({remoteAddress:T,close:F,getConnectionState:I,onConnectionStateChange:L})},z=e=>{w?d.error(e.message):(P(),N(),D(`disconnected`),a(e))},B=(e,t)=>{let n=_.get(e);n&&(clearTimeout(n),_.delete(e));let r=h.get(e)??[];h.delete(e),g.delete(e),m.delete(e);for(let e of r)t.write(e)},V=(e,t)=>{if(v.has(e)){d.debug(`Ignoring payload for closed conn=${e}`);return}if(f.size>=o){d.warn(`Rejecting reverse tunnel conn=${e}: max connections reached`),O(e),j(e);return}if(t.length>s){d.warn(`Rejecting reverse tunnel conn=${e}: initial payload exceeds pending byte limit`),O(e),j(e);return}h.set(e,[t]),g.set(e,t.length),m.add(e);let n=p.createConnection({host:r,port:i});A(),E&&n.pause(),f.set(e,n);let a=setTimeout(()=>{d.error(`Local TCP connect timed out conn=${e} after ${u}ms`),f.has(e)&&M(e,!0)},u);a.unref(),_.set(e,a),n.on(`connect`,()=>{d.debug(`Connected conn=${e} to ${r}:${i}`),B(e,n)});let l=jt(e),y=t=>{t&&d.error(`Failed to send conn=${e} data: ${t.message}`),A()};n.on(`data`,e=>{if(b&&b.readyState===J.default.OPEN){let t=Buffer.allocUnsafe(4+e.length);l.copy(t,0),e.copy(t,4),b.send(t,y),!E&&b.bufferedAmount>c&&k()}}),n.on(`close`,()=>{d.debug(`Local TCP connection closed conn=${e}`),f.has(e)&&M(e,!0)}),n.on(`error`,t=>{d.error(`Local TCP connection error conn=${e}: ${t.message}`),f.has(e)&&M(e,!0)})},ee=e=>{if(e.length<4){d.error(`Received binary frame shorter than 4 bytes; dropping`);return}let t=Mt(e),n=e.subarray(4);if(n.length===0){d.debug(`Received remote close for conn=${t}`),M(t,!1,!0);return}if(v.has(t)){d.debug(`Ignoring payload for closed conn=${t}`);return}let r=f.get(t);if(!r){V(t,n);return}if(m.has(t)){let e=h.get(t)??[],r=(g.get(t)??0)+n.length;if(r>s){d.warn(`Closing reverse tunnel conn=${t}: pending byte limit exceeded`),M(t,!0);return}e.push(n),h.set(t,e),g.set(t,r);return}r.write(n)},te=e=>{let t;try{t=JSON.parse(e.toString())}catch{z(Error(`Malformed reverse tunnel control message: ${e.toString()}`));return}if(t.type===`ready`){if(typeof t.remoteHost!=`string`||typeof t.remotePort!=`number`){z(Error(`Malformed reverse tunnel ready message: ${e.toString()}`));return}d.info(`Reverse tunnel ready: ${t.remoteHost}:${t.remotePort}`),D(`connected`),R({address:t.remoteHost,port:t.remotePort});return}if(t.type===`error`){z(Error(t.message||`Reverse tunnel failed to start`));return}z(Error(`Unexpected reverse tunnel control message type: ${t.type}`))},H=new URL(e),ne=G.getWebSocketAgent(H.toString());b=new J.default(H.toString(),{headers:{Authorization:`Bearer ${t}`},...ne?{agent:ne}:{},perMessageDeflate:!1}),b.on(`error`,e=>{d.error(`WebSocket error:`,e.message),z(e)}),b.on(`close`,(e,t)=>{x&&=(clearInterval(x),void 0),d.debug(`WebSocket disconnected (code=${e}, reason=${t.toString()})`),N(),D(`disconnected`),!S&&!w&&z(Error(`Reverse tunnel WebSocket closed before ready: ${e} ${t.toString()}`))}),b.on(`open`,()=>{let e=b;d.debug(`Connected WebSocket to ${H.toString()}`),x=setInterval(()=>{e.readyState===J.default.OPEN&&e.ping()},3e4)}),b.on(`message`,(e,t)=>{if(!w){if(t){z(Error(`Received reverse tunnel binary frame before ready control message`));return}te(e);return}if(!t){d.warn(`Ignoring unexpected reverse tunnel text message: ${e.toString()}`);return}ee(Buffer.isBuffer(e)?e:Array.isArray(e)?Buffer.concat(e):Buffer.from(e))})})}async function Dt(e,t,n,r,i){let a=i?.maxReconnectAttempts??6,o=i?.reconnectDelay??1e3,s=i?.maxReconnectDelay??3e4,c=i?.logLevel??`info`,l={debug:(...e)=>{c===`debug`&&console.log(`[Tunnel]`,...e)},info:(...e)=>{(c===`info`||c===`debug`)&&console.log(`[Tunnel]`,...e)},warn:(...e)=>{(c===`warn`||c===`info`||c===`debug`)&&console.warn(`[Tunnel]`,...e)},error:(...e)=>{c!==`none`&&console.error(`[Tunnel]`,...e)}};return new Promise((i,c)=>{let u=p.createServer(),d,f,m,h=0,g=!1,_,v=`connecting`,y,b,S=new Set,C=e=>{v!==e&&(v=e,l.debug(`Connection state changed to: ${e}`),S.forEach(t=>{try{t(e)}catch(e){l.error(`Error in connection state callback:`,e)}}))},w=()=>{m&&=(clearTimeout(m),void 0),f&&=(clearInterval(f),void 0),d&&=(d.removeAllListeners(),(d.readyState===J.default.OPEN||d.readyState===J.default.CONNECTING)&&d.close(1e3,`close`),void 0)},T=()=>{g=!0,w(),C(`disconnected`),_&&!_.destroyed&&_.destroy(),u.listening&&u.close()},E=()=>{if(g){l.debug(`Skipping reconnection (intentional disconnect)`);return}if(kt(b??``)){l.error(`Skipping reconnection (non-retryable error): ${b}`);return}if(!_||_.destroyed){l.debug(`Skipping reconnection (TCP socket closed)`);return}if(h>=a){l.error(`Max reconnection attempts (${a}) reached. Closing tunnel.`,b?`Last error: ${b}`:``),T();return}let e=Math.min(o*2**h,s);h++,l.debug(`Scheduling reconnection attempt ${h} in ${e}ms...`),C(`reconnecting`),m=setTimeout(()=>{l.debug(`Attempting to reconnect (attempt ${h})...`),D()},e)},D=()=>{if(!_||_.destroyed){l.error(`Cannot setup WebSocket: TCP socket is closed`);return}w(),C(`connecting`);let n=new URL(e);y&&n.searchParams.set(`sessionId`,y);let r=G.getWebSocketAgent(n.toString());d=new J.default(n.toString(),{headers:{Authorization:`Bearer ${t}`},...r?{agent:r}:{},perMessageDeflate:!1}),d.on(`error`,e=>{let t=e.message||String(e);b=t,l.debug(`WebSocket error:`,t)}),d.on(`close`,(e,t)=>{f&&=(clearInterval(f),void 0);let n=!g&&!kt(b??``)&&v!==`disconnected`;C(`disconnected`),l.debug(`WebSocket disconnected (code=${e}, reason=${t.toString()})`),_&&!_.destroyed&&!_.isPaused()&&(l.debug(`Pausing TCP socket (applying backpressure)`),_.pause()),n&&_&&!_.destroyed?E():kt(b??``)&&(l.error(`Closing tunnel due to non-retryable error: ${b}`),T())}),d.on(`open`,()=>{let e=d;l.debug(`WebSocket connected`),h=0,b=void 0,C(`connected`),f=setInterval(()=>{e.readyState===J.default.OPEN&&e.ping()},3e4),_&&_.isPaused()&&(l.debug(`Resuming TCP socket (releasing backpressure)`),_.resume());let t=t=>{e.readyState===J.default.OPEN&&e.send(t)};_.removeListener(`data`,t),_.on(`data`,t),e.on(`message`,e=>{_&&!_.destroyed&&_.write(e)})})};u.once(`error`,e=>{T(),c(Error(`TCP server error: ${e.message}`))});let O=()=>v,k=e=>(S.add(e),()=>{S.delete(e)});u.once(`listening`,()=>{let e=u.address();if(!e||typeof e==`string`)return T(),c(Error(`Failed to obtain listening address`));i({address:e,close:T,getConnectionState:O,onConnectionStateChange:k})});let A=()=>{w(),C(`disconnected`),_&&!_.destroyed&&(_.destroy(),_=void 0),h=0,g=!1,y=void 0,b=void 0,l.debug(`Connection cleaned up, ready for new TCP connection`)};u.on(`connection`,e=>{if(_&&!_.destroyed){l.debug(`Rejecting new TCP connection - already have an active connection`),e.destroy();return}y=x.randomUUID(),l.debug(`TCP client connected`,`sessionId`,y),_=e,_.on(`close`,()=>{l.debug(`TCP socket closed by client`),A()}),_.on(`error`,e=>{l.error(`TCP socket error:`,e),A()}),D()}),u.listen(r,n)})}async function Ot(e,t,n,r,i){let a=i?.logLevel??`info`,o={debug:(...e)=>{a===`debug`&&console.log(`[Tunnel:Mux]`,...e)},info:(...e)=>{(a===`info`||a===`debug`)&&console.log(`[Tunnel:Mux]`,...e)},warn:(...e)=>{(a===`warn`||a===`info`||a===`debug`)&&console.warn(`[Tunnel:Mux]`,...e)},error:(...e)=>{a!==`none`&&console.error(`[Tunnel:Mux]`,...e)}};return new Promise((a,s)=>{let c=p.createServer(),l=new Map,u=1,d,f,m=!1,h=!1,g=`connecting`,_=i?.maxReconnectAttempts??6,v=i?.reconnectDelay??1e3,y=i?.maxReconnectDelay??3e4,b=0,x,S,C=new Set,w=e=>{g!==e&&(g=e,o.debug(`Connection state changed to: ${e}`),C.forEach(t=>{try{t(e)}catch(e){o.error(`Error in connection state callback:`,e)}}))},T=()=>{f&&=(clearInterval(f),void 0),d&&=(d.removeAllListeners(),(d.readyState===J.default.OPEN||d.readyState===J.default.CONNECTING)&&d.close(1e3,`close`),void 0)},E=()=>{for(let[e,t]of l)o.debug(`Closing TCP connection ${e}`),t.destroyed||t.destroy();l.clear()},D=()=>{m=!0,x&&=(clearTimeout(x),void 0),T(),E(),w(`disconnected`),c.listening&&c.close()},O=()=>{if(m||x)return;if(kt(S??``)){o.error(`Closing multiplexed tunnel (non-retryable error): ${S}`),D();return}if(b>=_){o.error(`Max reconnection attempts (${_}) reached. Closing tunnel.`),D();return}let e=Math.min(v*2**b,y);b++,w(`reconnecting`),o.debug(`Scheduling reconnection attempt ${b} in ${e}ms...`),x=setTimeout(()=>{x=void 0,j().catch(()=>{})},e)},k=e=>{if(d&&d.readyState===J.default.OPEN){let t=jt(e);d.send(t),o.debug(`Sent close signal for connection ${e}`)}},A=e=>{let t=l.get(e);t&&(t.destroyed||t.destroy(),l.delete(e),o.debug(`Removed connection ${e}`))},j=()=>new Promise((n,r)=>{T(),w(`connecting`);let i=new URL(e);i.searchParams.set(`mode`,`multiplexed`),o.debug(`Connecting WebSocket to: ${i.toString()}`);let a=G.getWebSocketAgent(i.toString());d=new J.default(i.toString(),{headers:{Authorization:`Bearer ${t}`},...a?{agent:a}:{},perMessageDeflate:!1}),d.on(`error`,e=>{let t=e.message||String(e);S=t,o.error(`WebSocket error:`,t,e.code||``),r(e)}),d.on(`close`,(e,t)=>{if(f&&=(clearInterval(f),void 0),o.debug(`WebSocket disconnected (code=${e}, reason=${t.toString()})`),E(),!h||m){w(`disconnected`);return}O()}),d.on(`open`,()=>{let e=d;o.debug(`WebSocket connected`),b=0,S=void 0,w(`connected`),f=setInterval(()=>{e.readyState===J.default.OPEN&&e.ping()},3e4),e.on(`message`,e=>{let t=e;if(o.debug(`WS→TCP raw message: ${t.length} bytes`),t.length<4){o.error(`Received binary frame shorter than 4 bytes; dropping`);return}let n=Mt(t),r=t.subarray(4);if(r.length===0){o.debug(`Received close signal for connection ${n}`),A(n);return}o.debug(`WS→TCP [conn=${n}] ${r.length} bytes: ${r.subarray(0,Math.min(200,r.length)).toString(`utf8`).replace(/[\x00-\x1f]/g,`.`)}`);let i=l.get(n);i&&!i.destroyed?i.write(r):o.debug(`Received data for unknown/closed connection ${n}`)}),n()})});c.once(`error`,e=>{D(),s(Error(`TCP server error: ${e.message}`))});let M=()=>g,N=e=>(C.add(e),()=>{C.delete(e)});c.once(`listening`,async()=>{let e=c.address();if(!e||typeof e==`string`)return D(),s(Error(`Failed to obtain listening address`));o.debug(`Multiplexed tunnel listening on ${e.address}:${e.port}`);try{await j(),h=!0,o.debug(`WebSocket ready, tunnel fully initialized`),a({address:e,close:D,getConnectionState:M,onConnectionStateChange:N})}catch(e){D(),s(Error(`Failed to establish WebSocket connection: ${e}`))}}),c.on(`connection`,e=>{if(!d||d.readyState!==J.default.OPEN){e.destroy();return}let t=u++;u>4294967295&&(u=1),l.set(t,e),o.debug(`New TCP connection ${t} from ${e.remoteAddress}:${e.remotePort}, WS state=${d?.readyState}, total connections=${l.size}`),e.on(`data`,n=>{if(d&&d.readyState===J.default.OPEN){let e=jt(t),r=Buffer.concat([e,n]);o.debug(`TCP→WS [conn=${t}] ${n.length} bytes: ${n.subarray(0,Math.min(200,n.length)).toString(`utf8`).replace(/[\x00-\x1f]/g,`.`)}`),d.send(r,e=>{e&&o.error(`TCP→WS [conn=${t}] send error: ${e.message}`)})}else o.debug(`TCP→WS [conn=${t}] WS not open (state=${d?.readyState}), closing connection`),e.destroy()}),e.on(`close`,()=>{o.debug(`TCP connection ${t} closed by client`),k(t),l.delete(t)}),e.on(`error`,e=>{o.error(`TCP connection ${t} error:`,e),k(t),l.delete(t)})}),c.listen(r,n)})}const kt=e=>{let t=e.match(/Unexpected server response: (\d+)/);if(t&&t[1]){let e=parseInt(t[1],10);return e>=400&&e<500}return!1};function At(e,t,n,r){if(!Number.isInteger(e)||e<n||e>r)throw Error(`${t} must be an integer between ${n} and ${r}`)}function jt(e){let t=Buffer.alloc(4);return t.writeUInt32BE(e,0),t}function Mt(e){if(e.length<4)throw Error(`Header must be at least 4 bytes`);return e.readUInt32BE(0)}async function Nt(e,t,n,r){for(let i=0;i<=3;i++){let a=await G.fetch(e,{method:`GET`,headers:{Authorization:`Bearer ${t}`}});if(!a.ok){let e=await a.text();if(a.status>=500&&a.status<600&&i<3)continue;throw Error(`Download failed: ${a.status} ${e}`)}if(!a.body)throw Error(`Download failed: response body is missing`);await c.promises.mkdir(b.dirname(n),{recursive:!0});let o=d.fromWeb(a.body);if(r){let e=Number(a.headers.get(`content-length`)??0),t=0;o.on(`data`,n=>{t+=n.length,r(t,e)})}await w(o,c.createWriteStream(n));return}}const Pt=/^[0-9a-f]{64}$/i,Ft=/^[0-9a-f]{32}$/i;function It(e){return S.createHash(`sha256`).update(e).digest(`hex`).slice(0,32)}function Lt(e,t){let n=t*e.blockSize;return{offset:n,length:Math.min(e.blockSize,e.fileSize-n)}}async function Rt(e){return await new Promise((t,n)=>{let r=S.createHash(`sha256`),i=c.createReadStream(e);i.on(`data`,e=>r.update(e)),i.on(`error`,n),i.on(`end`,()=>t(r.digest(`hex`)))})}function zt(e,t){if(!e||typeof e!=`object`)throw Error(`Invalid seed signature: expected an object`);let n=e;if(n.version!==1)throw Error(`Unsupported seed signature version: ${String(n.version)}`);if(!Number.isSafeInteger(n.blockSize)||n.blockSize<=0)throw Error(`Invalid seed signature blockSize`);if(!Number.isSafeInteger(n.fileSize)||n.fileSize<0)throw Error(`Invalid seed signature fileSize`);if(typeof n.sha256!=`string`||!Pt.test(n.sha256)||n.sha256.toLowerCase()!==t.toLowerCase())throw Error(`Seed signature sha256 does not match the requested seed`);if(!Array.isArray(n.blocks))throw Error(`Invalid seed signature blocks`);let r=Math.ceil(n.fileSize/n.blockSize);if(n.blocks.length!==r)throw Error(`Invalid seed signature block count: got ${n.blocks.length}, expected ${r}`);let i=n.blocks.map((e,t)=>{if(!e||!Number.isInteger(e.w)||e.w<0||e.w>4294967295||typeof e.s!=`string`||!Ft.test(e.s))throw Error(`Invalid seed signature block at index ${t}`);return{w:e.w,s:e.s.toLowerCase()}});return{version:n.version,blockSize:n.blockSize,fileSize:n.fileSize,sha256:n.sha256.toLowerCase(),blocks:i}}async function Bt(e,t,n){let r=await G.fetch(e,{method:`GET`,headers:{Authorization:`Bearer ${t}`}});if(!r.ok){let e=await r.text();throw Error(`Seed signature download failed: ${r.status} ${e}`)}return zt(await r.json(),n)}async function Vt(e,t,n,r){let i=0;for(;i<n;){let{bytesRead:a}=await e.read(t,i,n-i,r+i);if(a<=0)throw Error(`Unexpected EOF at offset ${r+i}`);i+=a}}async function Ht(e,t,n,r,i){let a=n.blockSize,o=await c.promises.open(e.path,`r`);try{if(e.size<a||i.size===0)return;let s=Buffer.allocUnsafe(a);await Vt(o,s,a,0);let c=0,l=0;for(let e=0;e<a;e++){let t=s[e];c=c+t&65535,l=l+(a-e)*t&65535}let u=0,d=0,f,p=async t=>{f??=Buffer.allocUnsafe(a),await Vt(o,f,a,d);let s=It(f);for(let a of t)i.has(a)&&n.blocks[a].s===s&&(r.set(a,{sourcePath:e.path,sourceOffset:d}),i.delete(a))},m=t.get(l*65536+c);m?.some(e=>i.has(e))&&await p(m);let h=Buffer.allocUnsafe(1048576),g=a;for(;g<e.size&&i.size>0;){let n=Math.min(h.byteLength,e.size-g),{bytesRead:r}=await o.read(h,0,n,g);if(r<=0)break;for(let e=0;e<r&&i.size>0;e++){let n=s[u],r=h[e];s[u]=r,u++,u===a&&(u=0),c=c-n+r&65535,l=l-(a*n&65535)+c&65535,d++,m=t.get(l*65536+c),m?.some(e=>i.has(e))&&await p(m)}g+=r}}finally{await o.close()}}async function Ut(e){let t=[];for(let n of e){let e=await c.promises.stat(n).catch(()=>void 0);e?.isFile()&&t.push({path:n,size:e.size})}return t}async function Wt(e,t,n){for(let r of e){let e=await c.promises.open(r.path,`r`),i=Buffer.allocUnsafe(t.blockSize);try{for(let a=0;a<t.blocks.length;a++){if(n.has(a))continue;let o=Lt(t,a);o.offset+o.length>r.size||(await Vt(e,i,o.length,o.offset),It(i.subarray(0,o.length))===t.blocks[a].s&&n.set(a,{sourcePath:r.path,sourceOffset:o.offset}))}}finally{await e.close()}}}async function Gt(e,t,n){if(t.fileSize===0||t.fileSize%t.blockSize===0)return;let r=t.blocks.length-1;if(n.has(r))return;let i=Lt(t,r),a=t.blocks[r].s,o=Buffer.allocUnsafe(i.length);for(let t of e){if(t.size<i.length)continue;let e=t.size-i.length;if(e===i.offset)continue;let s=await c.promises.open(t.path,`r`);try{if(await Vt(s,o,i.length,e),It(o)===a){n.set(r,{sourcePath:t.path,sourceOffset:e});return}}finally{await s.close()}}}function Kt(e,t){let n=0;for(let r=0;r<e.blocks.length;r++)t.has(r)||(n+=Lt(e,r).length);return(e.blocks.length===0?1:t.size/e.blocks.length)>=.8&&n<=33554432}async function qt(e,t,n){let r=Math.floor(t.fileSize/t.blockSize),i=new Set,a=new Map;for(let e=0;e<r;e++){if(n.has(e))continue;i.add(e);let r=t.blocks[e].w,o=a.get(r)??[];o.push(e),a.set(r,o)}for(let r of e){if(i.size===0)return;await Ht(r,a,t,n,i)}}async function Jt(e,t){let n=await Ut(e),r=new Map;return await Wt(n,t,r),await Gt(n,t,r),Kt(t,r)||await qt(n,t,r),r}function Yt(e,t){let n=[],r;for(let i=0;i<=e.blocks.length;i++){let a=i<e.blocks.length&&!t.has(i);if(a&&r===void 0)r=i;else if(!a&&r!==void 0){let t=Lt(e,r),a=Lt(e,i-1);n.push({start:t.offset,end:a.offset+a.length-1}),r=void 0}}return n}async function Xt(e,t,n){let r=new Map;try{for(let[i,a]of n){let n=r.get(a.sourcePath);n||(n=await c.promises.open(a.sourcePath,`r`),r.set(a.sourcePath,n));let o=Lt(t,i),s=Buffer.allocUnsafe(o.length);await Vt(n,s,o.length,a.sourceOffset),await Zt(e,s,o.offset)}}finally{await Promise.all([...r.values()].map(e=>e.close()))}}async function Zt(e,t,n){let r=0;for(;r<t.byteLength;){let{bytesWritten:i}=await e.write(t,r,t.byteLength-r,n+r);if(i<=0)throw Error(`Unable to write reconstructed seed at offset ${n+r}`);r+=i}}async function Qt(e,t,n,r,i,a){let o=await G.fetch(e,{method:`GET`,headers:{Authorization:`Bearer ${t}`,Range:`bytes=${n.start}-${n.end}`}});if(o.status!==206||!o.body){let e=await o.text();throw Error(`Seed range download failed: ${o.status} ${e}`)}let s=`bytes ${n.start}-${n.end}/${r}`;if(o.headers.get(`content-range`)!==s)throw Error(`Invalid Content-Range for seed: ${o.headers.get(`content-range`)??`<missing>`}`);let c=n.end-n.start+1,l=0,u=d.fromWeb(o.body);for await(let e of u){let t=Buffer.isBuffer(e)?e:Buffer.from(e);if(l+t.byteLength>c)throw Error(`Seed range response exceeded the requested length`);await Zt(i,t,n.start+l),l+=t.byteLength,a(t.byteLength)}if(l!==c)throw Error(`Seed range response was truncated: got ${l}, expected ${c}`)}async function $t(e){let t=e.expectedSha256.toLowerCase(),n=await Bt(e.signatureUrl,e.token,t),r=await Jt([...new Set(e.sourcePaths.map(e=>b.resolve(e)))],n),i=Yt(n,r),a=i.reduce((e,t)=>e+t.end-t.start+1,0),o=0;e.onProgress?.(0,a),await c.promises.mkdir(b.dirname(e.outputPath),{recursive:!0});let s=`${e.outputPath}.reconstruct-${process.pid}-${S.randomBytes(6).toString(`hex`)}`,l=await c.promises.open(s,`wx`),u=!1,d=!1;try{await l.truncate(n.fileSize),await Xt(l,n,r);for(let t of i)await Qt(e.seedUrl,e.token,t,n.fileSize,l,t=>{o+=t,e.onProgress?.(o,a)});await l.close(),u=!0;let f=await Rt(s);if(f!==t)throw Error(`Reconstructed seed SHA-256 mismatch: got ${f}, expected ${t}`);await c.promises.rm(e.outputPath,{force:!0}),await c.promises.rename(s,e.outputPath),d=!0}finally{u||await l.close().catch(()=>void 0),d||await c.promises.rm(s,{force:!0})}return{downloadedBytes:o,totalDownloadBytes:a,matchedBlocks:r.size}}function en(e){return`${e}/sync/state`}function tn(e,t){return`${e}/sync/seeds/${encodeURIComponent(t)}`}async function nn(e){return await new Promise((t,n)=>{let r=S.createHash(`sha256`),i=c.createReadStream(e);i.on(`data`,e=>r.update(e)),i.on(`error`,n),i.on(`end`,()=>t(r.digest(`hex`)))})}async function rn(e,t){let n=await G.fetch(en(e),{method:`GET`,headers:{Authorization:`Bearer ${t}`}});if(!n.ok){let e=await n.text();throw Error(`Failed to fetch Android sync state: ${n.status} ${e}`)}return await n.json()}async function an(e,t,n,r,i,a){let o=b.basename(e),s=b.join(t,o),l=await rn(n,r).catch(e=>{i(`debug`,`android sync state unavailable: ${e instanceof Error?e.message:String(e)}`)});if(!l)return;let u=new Set;for(let e of l.roots??[])for(let t of e.files??[])t.path===o&&typeof t.sha256==`string`&&u.add(t.sha256.toLowerCase());let d=[...l.seeds??[]].filter(e=>typeof e.sha256==`string`&&/^[0-9a-f]{64}$/i.test(e.sha256)).sort((e,t)=>(t.mtime??0)-(e.mtime??0));for(let e of d)u.add(e.sha256.toLowerCase());let f;if(c.existsSync(s)){let e=(await nn(s)).toLowerCase();if(u.has(e))return;i(`debug`,`local basis ${e} unknown to instance; re-seeding basis cache`),f=s}let p=(await nn(e)).toLowerCase();if(u.has(p)){await c.promises.mkdir(b.dirname(s),{recursive:!0}),await c.promises.copyFile(e,s),i(`debug`,`seeded Android basis cache from local APK already known to instance: ${p}`);return}let m=d[0];if(!m){f&&await c.promises.rm(f,{force:!0});return}let h=tn(n,m.sha256);try{let t=await $t({signatureUrl:`${h}.sig`,seedUrl:h,token:r,sourcePaths:f?[e,f]:[e],outputPath:s,expectedSha256:m.sha256,...a?{onProgress:a}:{}});i(`debug`,`reconstructed Android basis seed ${m.sha256}: matched=${t.matchedBlocks} downloaded=${t.downloadedBytes}`)}catch(e){i(`debug`,`basis seed reconstruction unavailable; downloading full seed: ${e instanceof Error?e.message:String(e)}`),a?.(0,m.size??0),await Nt(h,r,s,a),i(`debug`,`seeded Android basis cache from full instance seed: ${m.sha256}`)}}var Y=class extends Error{constructor(e){super(e),this.name=`DestinationTunnelProtocolError`}};function X(e,t){if(typeof e!=`object`||!e||Array.isArray(e))throw new Y(`${t} must be an object`);return e}function on(e,t){let n=e[t];if(!Array.isArray(n))throw new Y(`${t} must be an array`);return n}function Z(e,t){let n=e[t];if(typeof n!=`string`)throw new Y(`${t} must be a string`);return n}function sn(e,t){let n=Z(e,t);if(n.length===0)throw new Y(`${t} must not be empty`);return n}function cn(e,t){let n=e[t];if(typeof n!=`boolean`)throw new Y(`${t} must be a boolean`);return n}function ln(e,t){let n=e[t];if(!Number.isInteger(n))throw new Y(`${t} must be an integer`);return n}function un(e,t){let n=e[t];if(typeof n!=`number`||!Number.isFinite(n))throw new Y(`${t} must be a finite number`);return n}function dn(e,t){if(!Number.isSafeInteger(e)||e<0)throw new Y(`${t} must be a safe non-negative integer`);return e}function fn(e,t){return e[t]===void 0?{}:{[t]:Z(e,t)}}function pn(e,t){return e[t]===void 0?{}:{[t]:cn(e,t)}}function mn(e,t){let n=e[t];if(n===void 0)return{};if(!Number.isInteger(n)||n<0)throw new Y(`${t} must be a non-negative integer`);return{[t]:n}}function hn(e){if(Buffer.isBuffer(e))return e;if(Array.isArray(e))return Buffer.concat(e);if(e instanceof ArrayBuffer)return Buffer.from(e);throw new Y(`unsupported WebSocket payload type`)}function gn(e,t){let n=new URL(e);if(n.protocol!==`https:`&&n.protocol!==`http:`&&n.protocol!==`wss:`&&n.protocol!==`ws:`)throw Error(`Unsupported apiUrl protocol for tunnel: ${n.protocol}`);let r=`${xn(n.pathname)}/tunnel`;return n.pathname=t===void 0?r:`${r}/${t}`,n.search=``,n.hash=``,n}function _n(e){let t=gn(e);return t.protocol=t.protocol===`https:`||t.protocol===`wss:`?`wss:`:`ws:`,t.toString()}function vn(e){let t=gn(e,`status`);return t.protocol=t.protocol===`wss:`?`https:`:t.protocol===`ws:`?`http:`:t.protocol,t}function yn(e,t){let n=gn(e,encodeURIComponent(t));return n.protocol=n.protocol===`wss:`?`https:`:n.protocol===`ws:`?`http:`:n.protocol,n}function bn(e,t,n=0,r){let i=typeof n==`number`?n:0,a=typeof n==`string`?n:r;if(!Number.isSafeInteger(i)||i<0)throw Error(`afterSequence must be a safe non-negative integer`);let o=new URL(e);return o.protocol=o.protocol===`wss:`?`https:`:o.protocol===`ws:`?`http:`:o.protocol,o.pathname=`${xn(o.pathname)}/${encodeURIComponent(t)}/inspection/events`,o.search=``,i>0&&o.searchParams.set(`after-sequence`,String(i)),a!==void 0&&o.searchParams.set(`token`,a),o.hash=``,o.toString()}function xn(e){let t=e.length;for(;t>0&&e.charCodeAt(t-1)===47;)t--;return e.slice(0,t)}function Sn(e,t,n,r={}){let i=!0,a=0,o=e=>{Mn(r.onError,e)},s=(e,t)=>{Mn(r.onEvent,{type:`gap`,sequence:t,data:{fromSequence:e,toSequence:t,message:`Inspection stream gap: missing sequences ${e}-${t}`}},o)},c=(e,t)=>{if(!Number.isSafeInteger(e)||e<0)throw new Y(`inspection sequence must be a safe non-negative integer`);if(e<=a)throw new Y(`inspection sequence ${e} is not newer than ${a}`);if(t){if(t.fromSequence!==a+1||t.toSequence!==e||t.fromSequence>t.toSequence)throw new Y(`invalid inspection gap range`);s(t.fromSequence,t.toSequence)}else e>a+1&&s(a+1,e-1);a=e},l=bn(e,t,a,n),u=Ce({url:l,fetch:G.fetch.bind(G),onMessage:e=>{if(i)try{let t=Cn(e.id,e.data);t.type===`gap`?c(t.sequence,t.data):(c(t.sequence),Mn(r.onEvent,t,o))}catch(e){o(e instanceof Error?e:Error(String(e)))}},onDisconnect:()=>{i&&o(Error(`Inspection SSE disconnected; reconnecting`))}});return{close:()=>{i&&(i=!1,u.close())}}}function Cn(e,t){if(e===void 0||!/^(0|[1-9]\d*)$/.test(e))throw new Y(`inspection SSE event ID must be an unsigned integer`);let n=Number(e);if(!Number.isSafeInteger(n))throw new Y(`inspection sequence must be a safe non-negative integer`);let r;try{r=JSON.parse(t)}catch{throw new Y(`inspection SSE data must be valid JSON`)}let i=X(r,`inspection event`);if(i.sequence!==void 0&&dn(i.sequence,`inspection sequence`)!==n)throw new Y(`inspection SSE event ID does not match envelope sequence`);if(Z(i,`type`)!==`body`)return wn(i,n);let a=An(i),o=X(i.data,`inspection body data`),s=Z(o,`direction`);if(s!==`request`&&s!==`response`)throw new Y(`invalid inspection body direction`);if(Z(o,`encoding`)!==`base64`)throw new Y(`inspection body encoding must be base64`);return{type:`body`,sequence:n,requestId:a,direction:s,body:Nn(Z(o,`chunk`))}}function wn(e,t){let n=Z(e,`type`),r=X(e.data,`inspection metadata data`);switch(n){case`complete`:return{type:n,sequence:t,requestId:An(e),data:Tn(r)};case`gap`:{let e=dn(r.fromSequence,`inspection sequence`),i=dn(r.toSequence,`inspection sequence`);return{type:n,sequence:t,data:{fromSequence:e,toSequence:i,message:`Inspection stream gap: missing sequences ${e}-${i}`}}}case`inspection_error`:return{type:n,sequence:t,...e.requestId===void 0?{}:{requestId:An(e)},data:{...r,message:Z(r,`message`)}};default:throw new Y(`unknown inspection metadata type ${n}`)}}function Tn(e){return jn(e,`startedDateTime`),un(e,`time`),Dn(X(e.request,`inspection request`)),On(X(e.response,`inspection response`)),En(X(e._limrun,`inspection extension`)),e}function En(e){if(Z(e,`tunnelId`),Z(e,`selectorId`),fn(e,`error`),pn(e,`requestBodyTruncated`),pn(e,`responseBodyTruncated`),e.responseTrailers!==void 0&&kn(e.responseTrailers,`response trailers`),e.responseCookieSameSite!==void 0)for(let t of on(e,`responseCookieSameSite`)){let e=X(t,`response cookie same-site metadata`);dn(e.index,`response cookie same-site index`),Z(e,`value`)}}function Dn(e){Z(e,`method`),Z(e,`url`),Z(e,`httpVersion`),kn(e.headers,`request headers`),kn(e.queryString,`request query string`),kn(e.cookies,`request cookies`),un(e,`headersSize`),un(e,`bodySize`),e.postData!==void 0&&X(e.postData,`request post data`)}function On(e){un(e,`status`),Z(e,`statusText`),Z(e,`httpVersion`),kn(e.headers,`response headers`),kn(e.cookies,`response cookies`);let t=X(e.content,`response content`);un(t,`size`),Z(t,`mimeType`),Z(e,`redirectURL`),un(e,`headersSize`),un(e,`bodySize`)}function kn(e,t){if(!Array.isArray(e))throw new Y(`${t} must be an array`);for(let n of e){let e=X(n,t);Z(e,`name`),Z(e,`value`)}}function An(e){let t=Z(e,`requestId`);if(!t)throw new Y(`inspection request ID must not be empty`);return t}function jn(e,t){let n=Z(e,t);if(!Number.isFinite(Date.parse(n)))throw new Y(`${t} must be an ISO date-time`);return n}function Mn(e,t,n){if(e)try{e(t)}catch(e){n?.(e instanceof Error?e:Error(String(e)))}}function Nn(e){try{if(e.length%4!=0)throw Error(`invalid base64 length`);let t=atob(e);if(btoa(t)!==e)throw Error(`non-canonical base64`);return Uint8Array.from(t,e=>e.charCodeAt(0))}catch{throw new Y(`inspection body chunk must be valid base64`)}}var Q=class extends Error{constructor(e,t){super(t),this.code=e,this.name=`DestinationTunnelSelectorError`}};function Pn(e,t){if(ar(e),t.length===0)throw new Y(`tunnel data frame must include a payload`);let n=Buffer.allocUnsafe(4+t.length);return n.writeUInt32BE(e,0),t.copy(n,4),n}function Fn(e){if(e.length<=4)throw new Y(`tunnel data frame must include a payload`);return{connId:e.readUInt32BE(0),payload:e.subarray(4)}}function In(e,t={}){if(!Array.isArray(e))throw new Q(`invalid_host`,`tunnel selectors must be an array`);if(e.length===0)throw new Q(`empty`,`at least one tunnel selector is required`);let n=[],r=new Set,i=0,a=0;for(let o of e){let e=Kn(o,t.minRoutePort);if(e.route?i++:a++,i>10)throw new Q(`too_many`,`at most 10 exact tunnel selectors are allowed`);if(a>64)throw new Q(`too_many`,`at most 64 domain tunnel selectors are allowed`);if(r.has(e.value))throw new Q(`duplicate`,`duplicate tunnel selector ${e.value}`);r.add(e.value),n.push(e.value)}return n}function Ln(e,t={}){let n=In(e,t),r=[],i=[];for(let e of n){let n=Kn(e,t.minRoutePort);n.route?r.push(n.route):i.push(n.domain)}return{...r.length>0?{routes:r}:{},...i.length>0?{domains:i}:{}}}function Rn(e,t=Bn()){let n=In(e),r=zn(t),i=[`"version":1`,`"selectors":[${n.map(e=>JSON.stringify(e)).join(`,`)}]`];return i.push(`"inspection":{"enabled":${r.enabled},"captureBodies":${r.captureBodies},"maxBodyBytes":${r.maxBodyBytes},"persist":${r.persist},"ttlSeconds":${r.ttlSeconds}}`),S.createHash(`sha256`).update(`{${i.join(`,`)}}`,`utf8`).digest(`hex`)}function zn(e){let t=e.enabled??!1,n=e.captureBodies??!1,r=e.maxBodyBytes??10485760,i=e.persist??!1,a=e.ttlSeconds??259200;if(n&&!t)throw new Y(`captureBodies requires inspection to be enabled`);if(i&&!t)throw new Y(`persist requires inspection to be enabled`);if(!Number.isInteger(r)||r<1||r>67108864)throw new Y(`maxBodyBytes must be an integer between 1 and 67108864`);if(!Number.isInteger(a)||a<1||a>2592e3)throw new Y(`ttlSeconds must be an integer between 1 and 2592000`);return{enabled:t,captureBodies:n,maxBodyBytes:r,persist:i,ttlSeconds:a}}function Bn(){return zn({enabled:!1,captureBodies:!1})}function Vn(e,t){let n=t.toLowerCase();if(e.startsWith(`*.`)){let t=e.slice(2);return n.length>t.length+1&&n.endsWith(`.${t}`)}return n===e}function Hn(e,t){let n=In(t),r=/^selector-([1-9]\d*)$/.exec(e.selectorId),i=r?.[1]?Number(r[1])-1:-1,a=()=>{throw new Y(`server requested undeclared selector ${e.selectorId} ${e.host}:${e.port}`)};i<0&&a(),e.port===53&&a();let o=n[i];if(o===void 0)return a();let s=Kn(o);return s.route?((e.host!==s.route.host||e.port!==s.route.port)&&a(),`route`):(Vn(s.domain,e.host)||a(),`domain`)}function Un(e){if(e.version!==1)throw new Y(`unsupported tunnel version ${e.version}`)}function Wn(e){let t=X(e,`tunnel control message`),n=Z(t,`type`);switch(n){case`start`:{let e=ln(t,`version`);if(e!==1)throw new Y(`unsupported tunnel version ${e}`);let r=In(on(t,`selectors`).map(e=>{if(typeof e!=`string`)throw new Y(`tunnel selector must be a string`);return e})),i=Qn(t);return JSON.stringify({type:n,version:e,selectors:r,inspection:i,window:nr(t)})}case`openOk`:return JSON.stringify({type:n,connId:ir(t),transport:er(t),window:nr(t)});case`fin`:return JSON.stringify({type:n,connId:ir(t)});case`openFail`:case`reset`:return JSON.stringify({type:n,connId:ir(t),reason:Z(t,`reason`),...fn(t,`osCode`)});case`windowUpdate`:return JSON.stringify({type:n,connId:ir(t),increment:rr(t)});default:throw new Y(`unknown tunnel control message type ${n}`)}}function Gn(e){let t=X(e,`tunnel control message`),n=Z(t,`type`);switch(n){case`ready`:return{type:n,version:ln(t,`version`),tunnelId:Z(t,`tunnelId`),selectors:on(t,`selectors`).map((e,t)=>Xn(e,`selector-${t+1}`)),configHash:Z(t,`configHash`)};case`open`:return{type:n,connId:ir(t),selectorId:Z(t,`selectorId`),host:Z(t,`host`),port:tr(t,`port`),transport:$n(t),window:nr(t)};case`fin`:return{type:n,connId:ir(t)};case`reset`:return{type:n,connId:ir(t),reason:Z(t,`reason`),...fn(t,`osCode`)};case`windowUpdate`:return{type:n,connId:ir(t),increment:rr(t)};case`error`:return{type:n,code:Z(t,`code`)};default:throw new Y(`unknown tunnel control message type ${n}`)}}function Kn(e,t=1){if(typeof e!=`string`||e.length===0)throw new Q(`empty`,`tunnel selector must not be empty`);if(!e.startsWith(`[`)&&!e.includes(`:`)){let t=Jn(e);return{value:t,domain:t}}let n,r;if(e.startsWith(`[`)){let t=/^\[([^\]]+)\]:(\d+)$/.exec(e);if(!t?.[1]||!t[2])throw new Q(`invalid_host`,`invalid tunnel selector ${e}`);n=t[1],r=t[2]}else{let t=e.lastIndexOf(`:`);if(t<=0||e.indexOf(`:`)!==t)throw new Q(`invalid_host`,`invalid tunnel selector ${e}`);n=e.slice(0,t),r=e.slice(t+1)}if(!/^\d+$/.test(r))throw new Q(`invalid_port`,`invalid tunnel selector port ${r}`);let i=qn({host:n,port:Number(r)},t);return{value:`${i.host.includes(`:`)?`[${i.host}]`:i.host}:${i.port}`,route:i}}function qn(e,t=1){if(!Number.isInteger(e.port)||e.port<t||e.port>65535||e.port===53)throw new Q(`invalid_port`,`invalid tunnel route port ${e.port}`);if(Buffer.byteLength(e.host,`utf8`)===e.host.length&&e.host.toLowerCase()===`localhost`)return{host:`localhost`,port:e.port};let n=m.isIP(e.host);if(n===4)return{host:e.host,port:e.port};if(n===6){let t=new URL(`http://[${e.host}]/`).hostname.slice(1,-1);if(t!==`::1`&&/^::(?:[0-9a-f]{1,4}:)?[0-9a-f]{1,4}$/.test(t))throw new Q(`invalid_host`,`invalid tunnel route host ${e.host}`);return{host:Yn(t),port:e.port}}throw new Q(`invalid_host`,`invalid tunnel route host ${e.host}`)}function Jn(e){let t=()=>{throw new Q(`invalid_domain`,`invalid tunnel domain ${e}`)};(typeof e!=`string`||e.length===0||e.length>260)&&t(),Buffer.byteLength(e,`utf8`)!==e.length&&t();let n=e.toLowerCase(),r=n.startsWith(`*.`),i=r?n.slice(2):n;(i.length===0||i.length>253)&&t(),i.includes(`*`)&&t(),(i.endsWith(`.`)||i.startsWith(`.`))&&t(),m.isIP(i)!==0&&t(),i===`localhost`&&t(),y(i)!==i&&t();let a=i.split(`.`);for(let e of a)(e.length===0||e.length>63)&&t(),/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/.test(e)||t();let o=a[a.length-1];return o!==void 0&&/^\d+$/.test(o)&&t(),r?`*.${i}`:i}function Yn(e){let t=/^::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/.exec(e);if(!t?.[1]||!t[2])return e;let n=Number.parseInt(t[1],16),r=Number.parseInt(t[2],16);return`${n>>8}.${n&255}.${r>>8}.${r&255}`}function Xn(e,t){let n=X(e,`tunnel selector`),r=Z(n,`id`);if(r!==t)throw new Y(`invalid tunnel selector id ${r}`);let i=Z(n,`kind`);if(i!==`route`&&i!==`domain`)throw new Y(`invalid tunnel selector kind ${i}`);let a={id:r,kind:i,value:Z(n,`value`)};return n.binds!==void 0&&(a.binds=on(n,`binds`).map(Zn)),a}function Zn(e){let t=X(e,`tunnel bind report`),n=Z(t,`status`);if(n!==`ok`&&n!==`conflict`&&n!==`error`)throw new Y(`invalid tunnel bind status ${n}`);return{address:Z(t,`address`),status:n,...fn(t,`osCode`)}}function Qn(e){let t=X(e.inspection,`inspection`);return zn({enabled:cn(t,`enabled`),captureBodies:cn(t,`captureBodies`),maxBodyBytes:ln(t,`maxBodyBytes`),persist:cn(t,`persist`),ttlSeconds:ln(t,`ttlSeconds`)})}function $n(e){let t=X(e.transport,`transport`),n=Z(t,`type`);if(n===`tcp`)return{type:n};if(n===`tls`){let e=Z(t,`serverName`);if(e.length===0)throw new Y(`TLS transport requires serverName`);return{type:n,serverName:e,alpnProtocols:on(t,`alpnProtocols`).map(e=>{if(typeof e!=`string`||e.length===0)throw new Y(`alpnProtocols must contain non-empty strings`);return e})}}throw new Y(`unsupported tunnel transport ${n}`)}function er(e){let t=X(e.transport,`transport`),n=Z(t,`type`);if(n!==`tcp`&&n!==`tls`)throw new Y(`unsupported tunnel transport ${n}`);return{type:n,...fn(t,`alpnProtocol`),...fn(t,`remoteAddress`),...mn(t,`dnsMs`),...mn(t,`connectMs`),...mn(t,`tlsMs`)}}function tr(e,t){let n=ln(e,t);if(n<1||n>65535)throw new Y(`${t} must be between 1 and 65535`);return n}function nr(e){let t=ln(e,`window`);if(t<1||t>67108864)throw new Y(`window must be an integer between 1 and 67108864`);return t}function rr(e){let t=ln(e,`increment`);if(t<1||t>2147483647)throw new Y(`increment must be an integer between 1 and 2147483647`);return t}function ir(e){let t=ln(e,`connId`);return ar(t),t}function ar(e){if(!Number.isInteger(e)||e<0||e>4294967295)throw new Y(`connId must be an unsigned 32-bit integer`)}const $=new m.BlockList;$.addSubnet(`0.0.0.0`,8,`ipv4`),$.addSubnet(`127.0.0.0`,8,`ipv4`),$.addSubnet(`169.254.0.0`,16,`ipv4`),$.addSubnet(`224.0.0.0`,3,`ipv4`),$.addSubnet(`::`,96,`ipv6`),$.addSubnet(`fe80::`,10,`ipv6`),$.addSubnet(`ff00::`,8,`ipv6`),$.addSubnet(`::ffff:0.0.0.0`,104,`ipv6`),$.addSubnet(`::ffff:127.0.0.0`,104,`ipv6`),$.addSubnet(`::ffff:169.254.0.0`,112,`ipv6`),$.addSubnet(`::ffff:224.0.0.0`,99,`ipv6`);async function or(e,t,n){let r=In(n.selectors),i=Ln(r).routes??[],a=zn(n.inspection??Bn()),o=n.logLevel??`info`,s=lr(n.window??1048576,`window`),c=lr(n.maxConnections??64,`maxConnections`),l=lr(n.maxPendingBytesPerConnection??16777216,`maxPendingBytesPerConnection`),u=lr(n.maxTotalPendingBytes??16777216,`maxTotalPendingBytes`),d=lr(n.maxBufferedBytes??4194304,`maxBufferedBytes`),f=lr(n.connectTimeoutMs??1e4,`connectTimeoutMs`),p=lr(n.handshakeTimeoutMs??15e3,`handshakeTimeoutMs`),m=lr(n.livenessTimeoutMs??9e4,`livenessTimeoutMs`),g=Math.min(3e4,Math.max(1,Math.floor(m/3))),_=d/4,v=d+Math.max(65536,Math.floor(d/4)),y={debug:(...e)=>{o===`debug`&&console.log(`[DestinationTunnel]`,...e)},info:(...e)=>{(o===`info`||o===`debug`)&&console.log(`[DestinationTunnel]`,...e)},warn:(...e)=>{(o===`warn`||o===`info`||o===`debug`)&&console.warn(`[DestinationTunnel]`,...e)},error:(...e)=>{o!==`none`&&console.error(`[DestinationTunnel]`,...e)}};return new Promise((o,b)=>{let x=new Map,S=new Map,C=new Set,w=new URL(e),E=G.getWebSocketAgent(w.toString()),D=new J.default(w.toString(),{headers:{Authorization:`Bearer ${t}`},...E?{agent:E}:{},perMessageDeflate:!1}),O=`connecting`,k,A,j,M=!1,N=!1,P,F=!1,I=0,L=e=>{if(O!==e){O=e;for(let t of C)try{t(e)}catch(e){y.error(`Connection state callback failed:`,e)}}},R=()=>O,z=e=>(C.add(e),()=>C.delete(e)),B=e=>{let t=S.get(e);t&&clearTimeout(t);let n=setTimeout(()=>S.delete(e),3e4);n.unref(),S.set(e,n)},V=(e,t)=>{let n=x.get(e);n&&(x.delete(e),n.abortController.abort(),clearTimeout(n.connectTimer),B(e),t&&n.socket&&!n.socket.destroyed&&n.socket.destroy())},ee=()=>{for(let e of Array.from(x.keys()))V(e,!0);for(let e of S.values())clearTimeout(e);S.clear(),F=!1},te=()=>{N||(N=!0,k&&=(clearInterval(k),void 0),A&&=(clearTimeout(A),void 0),j&&=(clearTimeout(j),void 0),ee(),P?.close(),P=void 0,D.removeAllListeners(`open`),D.removeAllListeners(`message`),D.removeAllListeners(`ping`),D.removeAllListeners(`pong`),(D.readyState===J.default.OPEN||D.readyState===J.default.CONNECTING)&&D.close(1e3,`close`),L(`disconnected`))},H=e=>{N||(y.error(e.message),te(),M||b(e))},ne=e=>!F&&e.creditQueueBytes===0,re=()=>{if(!F){F=!0;for(let e of x.values())e.socket&&!e.socket.destroyed&&e.socket.pause()}},ie=()=>{if(!(!F||D.bufferedAmount>=_)){F=!1;for(let e of x.values())e.socket&&!e.socket.destroyed&&ne(e)&&e.socket.resume()}},ae=()=>{D.bufferedAmount>v?H(Error(`destination tunnel WebSocket send buffer exceeded its hard limit`)):!F&&D.bufferedAmount>d&&re()},oe=e=>{e?H(e):ie()},U=e=>{if(N||D.readyState!==J.default.OPEN){H(Error(`destination tunnel WebSocket is not open`));return}D.send(Wn(e),oe),ae()},se=(e,t)=>{if(N||D.readyState!==J.default.OPEN){H(Error(`destination tunnel WebSocket closed while sending data`));return}D.send(Pn(e,t),{binary:!0},oe),ae()},ce=(e,t,n)=>{U({type:`openFail`,connId:e,reason:t,...n?{osCode:n}:{}}),B(e)},W=(e,t,n)=>{U({type:`reset`,connId:e,reason:t,...n?{osCode:n}:{}})},le=(e,t,n)=>{for(n&&n.length>0&&(t.creditQueue.push(n),t.creditQueueBytes+=n.length);t.creditQueue.length>0&&t.sendCredit>0;){let n=t.creditQueue[0];if(n.length<=t.sendCredit)t.creditQueue.shift(),t.creditQueueBytes-=n.length,t.sendCredit-=n.length,se(e,n);else{let r=n.subarray(0,t.sendCredit);t.creditQueue[0]=n.subarray(t.sendCredit),t.creditQueueBytes-=r.length,t.sendCredit=0,se(e,r)}if(N)return}t.creditQueue.length===0&&t.finPending&&(t.finPending=!1,t.localInputEnded=!0,U({type:`fin`,connId:e})),!(!t.socket||t.socket.destroyed)&&(t.creditQueueBytes>0?t.socket.pause():F||t.socket.resume())},ue=async e=>{let t=Date.now(),n=await T.promises.lookup(e.host,{all:!0,verbatim:!0}),r=Date.now()-t;for(let t of n)if(sr(t.address,e.port,i))return{host:t.address,dnsMs:r};let a=Error(`all resolved addresses for ${e.host} are blocked`);throw a.code=`EBLOCKED`,a},de=(e,t,n)=>new Promise((r,i)=>{let a=h.connect({socket:e,rejectUnauthorized:!0,servername:t.serverName,ALPNProtocols:t.alpnProtocols});a.allowHalfOpen=!0;let o=()=>{a.removeListener(`secureConnect`,s),a.removeListener(`error`,c),n.signal.removeEventListener(`abort`,l)},s=()=>{o(),a.pause(),r(a)},c=e=>{o(),i(e)},l=()=>{o(),a.destroy(),i(Object.assign(Error(`TLS connection cancelled`),{code:`ECANCELED`}))};a.once(`secureConnect`,s),a.once(`error`,c),n.signal.aborted?l():n.signal.addEventListener(`abort`,l,{once:!0})}),fe=e=>{let t;try{t=Hn(e,r)}catch{ce(e.connId,`selector_not_allowed`);return}if(x.has(e.connId)||S.has(e.connId))throw new Y(`server reused connection ID ${e.connId}`);if(x.size>=c){ce(e.connId,`resource_exhausted`);return}let n=new AbortController,i=setTimeout(()=>{x.get(e.connId)?.phase===`connecting`&&(y.warn(`Failed to connect to ${e.host}:${e.port}: timed out`),ce(e.connId,`connection_timed_out`,`ETIMEDOUT`),V(e.connId,!0))},f);i.unref();let a={phase:`connecting`,abortController:n,connectTimer:i,localInputEnded:!1,remoteInputEnded:!1,pendingWriteBytes:0,sendCredit:e.window,creditQueue:[],creditQueueBytes:0,finPending:!1,deliveredSinceUpdate:0};x.set(e.connId,a),(async()=>{let r=e.host;if(t===`domain`){let t=await ue(e);r=t.host,a.dnsMs=t.dnsMs}if(x.get(e.connId)!==a||N)return;let o=await G.connectTcp({host:r,port:e.port,proxyLookupHost:e.host,proxyLookupProtocol:e.transport.type===`tls`?`https:`:`http:`,timeoutMs:f,signal:n.signal});if(x.get(e.connId)!==a||N){o.socket.destroy();return}a.socket=o.socket;let c=o.socket,l;if(e.transport.type===`tls`){let t=Date.now();if(c=await de(o.socket,e.transport,n),l=Date.now()-t,x.get(e.connId)!==a||N){c.destroy();return}a.socket=c}clearTimeout(i),c.on(`data`,t=>{x.get(e.connId)===a&&a.phase===`open`&&le(e.connId,a,t)}),c.once(`end`,()=>{if(x.get(e.connId)===a&&a.phase===`open`){if(a.creditQueueBytes>0){a.finPending=!0;return}a.localInputEnded=!0,U({type:`fin`,connId:e.connId})}}),c.once(`error`,t=>{x.get(e.connId)===a&&(W(e.connId,`connection_error`,t.code),V(e.connId,!0))}),c.once(`close`,()=>{x.get(e.connId)===a&&((!a.localInputEnded||!a.remoteInputEnded)&&W(e.connId,`connection_error`),V(e.connId,!1))}),a.phase=`open`,U({type:`openOk`,connId:e.connId,transport:{type:e.transport.type,...o.remoteAddress===void 0?{}:{remoteAddress:o.remoteAddress},...a.dnsMs===void 0?{}:{dnsMs:a.dnsMs},connectMs:o.connectMs,...l===void 0?{}:{tlsMs:l},...c instanceof h.TLSSocket&&c.alpnProtocol?{alpnProtocol:c.alpnProtocol}:{}},window:s}),y.debug(`Forwarding connection ${e.connId} to ${e.host}:${e.port}`),!F&&a.creditQueueBytes===0&&c.resume()})().catch(t=>{if(x.get(e.connId)!==a)return;y.warn(`Failed to connect to ${e.host}:${e.port}: ${t.code??t.message}`);let n=t.code===`EBLOCKED`?`selector_not_allowed`:cr(t);ce(e.connId,n,t.code===`EBLOCKED`?void 0:t.code),V(e.connId,!0)})},pe=e=>{let t=x.get(e);if(t?.phase===`open`&&t.socket)return t;t?(W(e,`protocol_error`),V(e,!0)):S.has(e)||(W(e,`protocol_error`),B(e))},me=e=>{let t=pe(e);if(t){if(t.remoteInputEnded){W(e,`protocol_error`),V(e,!0);return}t.remoteInputEnded=!0,t.socket.end()}},he=e=>{x.has(e)&&V(e,!0)},ge=(e,t)=>{let n=x.get(e);!n||n.phase!==`open`||(n.sendCredit+=t,le(e,n))},_e=e=>{if(!M)throw new Y(`received tunnel data before READY`);let{connId:t,payload:n}=Fn(e),r=pe(t);if(!r)return;if(r.remoteInputEnded){W(t,`protocol_error`),V(t,!0);return}let i=r.pendingWriteBytes+n.length,a=I+n.length;if(i>l||a>u){W(t,`resource_exhausted`),V(t,!0);return}r.pendingWriteBytes=i,I=a,r.socket.write(n,e=>{if(r.pendingWriteBytes-=n.length,I-=n.length,e&&x.get(t)===r){let n=e.code;W(t,`connection_error`,n),V(t,!0);return}if(x.get(t)===r&&(r.deliveredSinceUpdate+=n.length,r.deliveredSinceUpdate>=Math.ceil(s/2))){let e=r.deliveredSinceUpdate;r.deliveredSinceUpdate=0,!N&&D.readyState===J.default.OPEN&&U({type:`windowUpdate`,connId:t,increment:e})}})},ve=i=>{switch(i.type){case`ready`:{if(M)throw new Y(`received duplicate READY`);Un(i);let s=Rn(r,a);if(i.configHash!==s)throw new Y(`server acknowledged config ${i.configHash} but ${s} was negotiated`);if(M=!0,A&&=(clearTimeout(A),void 0),ye(),L(`connected`),y.info(`Destination tunnel ready with ${r.length} selector(s)`),a.enabled)try{P=Sn(e,i.tunnelId,t,{...n.onInspectionEvent?{onEvent:n.onInspectionEvent}:{},...n.onInspectionError?{onError:n.onInspectionError}:{}})}catch(e){try{n.onInspectionError?.(e instanceof Error?e:Error(String(e)))}catch{}}o({tunnelId:i.tunnelId,selectors:i.selectors,configHash:i.configHash,inspection:a,...P?{inspectionStream:P}:{},close:te,getConnectionState:R,onConnectionStateChange:z});return}case`error`:throw Error(`destination tunnel failed: ${i.code}`);case`open`:if(!M)throw new Y(`received OPEN before READY`);fe(i);return;case`fin`:if(!M)throw new Y(`received FIN before READY`);me(i.connId);return;case`windowUpdate`:if(!M)throw new Y(`received windowUpdate before READY`);ge(i.connId,i.increment);return;case`reset`:if(!M)throw new Y(`received RESET before READY`);he(i.connId)}},ye=()=>{!M||N||(j&&clearTimeout(j),j=setTimeout(()=>{H(Error(`destination tunnel received no frames for ${m}ms`))},m),j.unref())};A=setTimeout(()=>{H(Error(`destination tunnel was not ready within ${p}ms`))},p),A.unref(),D.on(`open`,()=>{U({type:`start`,version:1,selectors:r,inspection:a,window:s}),k=setInterval(()=>{D.readyState===J.default.OPEN&&(D.ping(void 0,!0,oe),ae())},g),k.unref()}),D.on(`message`,(e,t)=>{try{ye(),t?_e(hn(e)):ve(Gn(JSON.parse(hn(e).toString(`utf8`))))}catch(e){H(e instanceof Error?e:Error(String(e)))}}),D.on(`ping`,ye),D.on(`pong`,ye),D.once(`error`,e=>{H(e)}),D.once(`close`,(e,t)=>{if(N){D.removeAllListeners();return}H(Error(`destination tunnel WebSocket closed: ${e}${t.length?` ${t.toString()}`:``}`)),D.removeAllListeners()})})}function sr(e,t,n){for(let r of n)if(r.port===t&&(r.host===e||r.host===`localhost`&&(e===`127.0.0.1`||e===`::1`)))return!0;let r=m.isIP(e);return r===4?!$.check(e,`ipv4`):r===6&&!$.check(e,`ipv6`)}function cr(e){switch(e.code){case`ENOTFOUND`:return`dns_not_found`;case`EAI_AGAIN`:return`dns_temporary_failure`;case`ECONNREFUSED`:return`connection_refused`;case`ECONNRESET`:return`connection_reset`;case`ETIMEDOUT`:return`connection_timed_out`;case`ENETUNREACH`:case`EHOSTUNREACH`:return`unreachable`;case`EACCES`:case`EPERM`:case`EPROXYAUTH`:return`permission_denied`;case`EMFILE`:case`ENFILE`:case`ENOBUFS`:case`ENOMEM`:return`resource_exhausted`;case`ECANCELED`:return`cancelled`;case`CERT_HAS_EXPIRED`:case`CERT_NOT_YET_VALID`:case`CERT_REJECTED`:case`CERT_REVOKED`:case`CERT_SIGNATURE_FAILURE`:case`CERT_UNTRUSTED`:case`DEPTH_ZERO_SELF_SIGNED_CERT`:case`ERR_TLS_CERT_ALTNAME_FORMAT`:case`SELF_SIGNED_CERT_IN_CHAIN`:case`HOSTNAME_MISMATCH`:case`INVALID_CA`:case`INVALID_PURPOSE`:case`PATH_LENGTH_EXCEEDED`:case`UNABLE_TO_GET_ISSUER_CERT`:case`UNABLE_TO_GET_ISSUER_CERT_LOCALLY`:case`UNABLE_TO_VERIFY_LEAF_SIGNATURE`:case`ERR_TLS_CERT_ALTNAME_INVALID`:return`tls_validation_failed`;case`EPROTO`:return`tls_protocol_error`;default:return e.code?.startsWith(`ERR_SSL_`)||e.code?.startsWith(`ERR_TLS_`)?`tls_handshake_failed`:`internal`}}function lr(e,t){if(!Number.isInteger(e)||e<=0)throw Error(`${t} must be a positive integer`);return e}async function ur(e,t){let n=await G.fetch(vn(e).toString(),{headers:{Authorization:`Bearer ${t}`}});if(!n.ok)throw Error(`getTunnelStatus failed: ${n.status} ${await n.text()}`);return fr(await n.json())}async function dr(e,t,n){if(!n.trim())throw Error(`tunnelId must not be empty`);let r=await G.fetch(yn(e,n).toString(),{method:`DELETE`,headers:{Authorization:`Bearer ${t}`}});if(!r.ok)throw Error(`stopTunnel failed: ${r.status} ${await r.text()}`)}function fr(e){let t=X(e,`tunnel status`),n={};return t.active!==void 0&&(n.active=pr(t.active)),t.lastFailure!==void 0&&(n.lastFailure=_r(t.lastFailure)),t.lastDialFailure!==void 0&&(n.lastDialFailure=vr(t.lastDialFailure)),n}function pr(e){let t=X(e,`active tunnel`),n=Z(t,`state`);if(n!==`starting`&&n!==`ready`&&n!==`stopping`)throw Error(`invalid tunnel state ${n}`);return{tunnelId:sn(t,`tunnelId`),state:n,selectors:on(t,`selectors`).map((e,t)=>hr(e,`selector-${t+1}`)),inspection:mr(t)}}function mr(e){let t=X(e.inspection,`inspection`),n=t.enabled,r=t.captureBodies,i=t.persist;if(typeof n!=`boolean`||typeof r!=`boolean`||typeof i!=`boolean`)throw Error(`inspection enabled, captureBodies, and persist must be booleans`);let a=t.maxBodyBytes,o=t.ttlSeconds;if(typeof a!=`number`||typeof o!=`number`)throw Error(`inspection maxBodyBytes and ttlSeconds must be numbers`);return zn({enabled:n,captureBodies:r,maxBodyBytes:a,persist:i,ttlSeconds:o})}function hr(e,t){let n=X(e,`tunnel selector`),r=sn(n,`id`);if(r!==t)throw Error(`invalid tunnel selector id ${r}`);let i=Z(n,`kind`);if(i!==`route`&&i!==`domain`)throw Error(`invalid tunnel selector kind ${i}`);return{id:r,kind:i,value:sn(n,`value`),...n.binds===void 0?{}:{binds:on(n,`binds`).map(gr)}}}function gr(e){let t=X(e,`tunnel bind report`),n=Z(t,`status`);if(n!==`ok`&&n!==`conflict`&&n!==`error`)throw Error(`invalid tunnel bind status ${n}`);let r=t.osCode;if(r!==void 0&&typeof r!=`string`)throw Error(`tunnel bind osCode must be a string`);return{address:sn(t,`address`),status:n,...r===void 0?{}:{osCode:r}}}function _r(e){let t=X(e,`tunnel failure`);return{tunnelId:sn(t,`tunnelId`),code:sn(t,`code`)}}function vr(e){let t=X(e,`tunnel dial failure`),n=t.connectionId;if(typeof n!=`number`||!Number.isInteger(n)||n<0||n>4294967295)throw Error(`tunnel dial failure connectionId must be an unsigned 32-bit integer`);let r=t.osCode;if(r!==void 0&&typeof r!=`string`)throw Error(`tunnel dial failure osCode must be a string`);return{tunnelId:sn(t,`tunnelId`),connectionId:n,selectorId:sn(t,`selectorId`),reason:sn(t,`reason`),...r===void 0?{}:{osCode:r}}}function yr(e){if(!e)return{};if(e===!0)return{persist:!0};if(e.ttlSeconds!==void 0&&(!Number.isInteger(e.ttlSeconds)||e.ttlSeconds<=0))throw Error(`ttlSeconds must be a positive integer`);return{persist:!0,...e.ttlSeconds!==void 0&&{ttlSeconds:e.ttlSeconds}}}var br=class extends Error{};function xr(e){let t=!1,n=0,r=0,i=0,a=0,o=!1,s=!1,c,l=n=>{t||(t=!0,u.close(),e.onError?.(n))},u=Ce({url:e.url,fetch:we(async(e,t)=>{let n=await G.fetch(e,t);return n.ok||(c=Error(`server answered HTTP ${n.status}`)),s=n.ok,n},e=>{c=e instanceof Error?e:Error(String(e))}),headers:{Authorization:`Bearer ${e.token}`},onConnect:()=>{n=Date.now()},onComment:()=>{o=!0},onScheduleReconnect:()=>{if(t)return;let u=Date.now(),d=performance.now(),f=n>0?u-n:0;n=0,r>0&&i>0&&u-i-(d-a)>3e4&&(r=u),i=u,a=d;let p=o||s&&f>=Te.healthyConnectionMs;if(o=!1,s=!1,p){r=0,c=void 0;return}if(r===0){r=u;return}if(u-r>=Te.giveUpAfterMs){let t=Math.round((u-r)/1e3),n=c?`; last error: ${c.message}`:``;l(new br(`session stream to ${e.url} kept failing for ${t}s without delivering entries${n}; the instance may no longer exist`))}},onMessage:t=>{r=0,o=!0,c=void 0;let n=typeof t.data==`string`?t.data:String(t.data??``),i;try{i=JSON.parse(n)}catch{return}typeof i?.ts==`number`&&e.onEntry(i)}});return()=>{t||(t=!0,u.close())}}function Sr(e){let t=new URL(e);return t.protocol=t.protocol===`https:`?`wss:`:`ws:`,t.search=``,t.hash=``,t.pathname=`${t.pathname.replace(/\/$/,``)}/ws`,t.toString().replace(/\/$/,``)}function Cr(e){return`${e}/files?path=%2Fdata%2Flocal%2Ftmp%2Frecordings%2Fvideo_recording.mp4`}function wr(e,t){if(!Number.isInteger(t)||t<0)throw Error(`${e} must be a non-negative integer Kbps value`)}async function Tr(e){if(!(await c.promises.stat(e).catch(()=>null))?.isFile())throw Error(`APK file not found: ${e}`);let t=await c.promises.open(e,`r`);try{let n=Buffer.alloc(4),{bytesRead:r}=await t.read(n,0,4,0);if(r<4||n[0]!==80||n[1]!==75)throw Error(`File is not an APK/ZIP archive: ${e}`)}finally{await t.close()}}var Er;(function(e){e[e.Q5=5]=`Q5`,e[e.Q6=6]=`Q6`,e[e.Q7=7]=`Q7`,e[e.Q8=8]=`Q8`,e[e.Q9=9]=`Q9`,e[e.Q10=10]=`Q10`})(Er||={});function Dr(e){return e.map(e=>`'${e.replace(/'/g,`'\\''`)}'`).join(` `)}async function Or(e){let t=`${Sr(e.apiUrl)}?token=${e.token}`,n=e.apiUrl,r=e.logLevel??`info`,i=e.maxReconnectAttempts??6,o=e.reconnectDelay??1e3,s=e.maxReconnectDelay??3e4,l,u=`connecting`,d=0,f,p=!1,m,h=new Map,_=new Map,v=new Map,y=new Set,x={debug:(...e)=>{r===`debug`&&console.log(`[Endpoint]`,...e)},info:(...e)=>{(r===`info`||r===`debug`)&&console.log(`[Endpoint]`,...e)},warn:(...e)=>{(r===`warn`||r===`info`||r===`debug`)&&console.warn(`[Endpoint]`,...e)},error:(...e)=>{r!==`none`&&console.error(`[Endpoint]`,...e)}},C=e=>{u!==e&&(u=e,x.debug(`Connection state changed to: ${e}`),y.forEach(t=>{try{t(e)}catch(e){x.error(`Error in connection state callback:`,e)}}))},w=e=>{h.forEach(t=>{clearTimeout(t.timeout),t.reject(Error(e))}),h.clear(),_.forEach(t=>{t.forEach(t=>{clearTimeout(t.timeout),t.reject(Error(e))})}),_.clear()},T=()=>{f&&=(clearTimeout(f),void 0),E&&=(clearInterval(E),void 0),l&&=(l.removeAllListeners(),(l.readyState===J.default.OPEN||l.readyState===J.default.CONNECTING)&&l.close(),void 0)},E,D=0,O=Math.random().toString(36).substring(2,15)+Math.random().toString(36).substring(2,15);return new Promise((k,A)=>{let j=!1,M=e=>(D+=1,`${e}-${Date.now()}-${D}`),N=(e,t)=>{let n=h.get(e);if(!n){x.debug(`Received response for unknown/already-settled request: ${e}`);return}clearTimeout(n.timeout),h.delete(e),n.resolve(t)},P=(e,t)=>{let n=h.get(e);if(!n){x.debug(`Received error for unknown/already-settled request: ${e}`);return}clearTimeout(n.timeout),h.delete(e),n.reject(t)},F=e=>{if(`message`in e&&typeof e.message==`string`)return e.message;if(`error`in e&&typeof e.error==`string`&&e.error)return e.error;if(`error`in e&&e.error&&typeof e.error==`object`){let t=e.error;return typeof t.message==`string`&&t.message?t.message:typeof t.code==`string`&&t.code?t.code:`Server returned ${String(e.type)} with an error payload but no error message/code`}},I=e=>{if(!(`type`in e)||typeof e.type!=`string`)return!1;switch(e.type){case`screenshotResult`:case`getElementTreeResult`:case`findElementResult`:case`tapResult`:case`setTextResult`:case`pressKeyResult`:case`scrollScreenResult`:case`scrollElementResult`:case`openUrlResult`:case`launchAppResult`:case`terminateAppResult`:case`watchAppResult`:case`unwatchAppResult`:case`listAppsResult`:case`playOnMicrophoneResult`:case`cameraControlResult`:case`adbShellResult`:case`setWifiBandwidthResult`:case`startRecordingResult`:case`stopRecordingResult`:case`startAppLogCaptureResult`:case`stopAppLogCaptureResult`:case`startEventCaptureResult`:case`stopEventCaptureResult`:return`id`in e&&typeof e.id==`string`;default:return!1}},L=async(e,t,n=3e4)=>{if(!l||l.readyState!==J.default.OPEN)return Promise.reject(Error(`WebSocket is not connected or connection is not open.`));let r=M(`ts-client`),i=Object.keys(t).length>0?{type:e,id:r,...t,payload:t}:{type:e,id:r};return new Promise((t,a)=>{let o=setTimeout(()=>{h.has(r)&&(h.delete(r),a(Error(`Request ${e} timed out`)))},n);h.set(r,{resolve:e=>t(e),reject:e=>a(e),timeout:o}),l.send(JSON.stringify(i),e=>{e&&(clearTimeout(o),h.delete(r),a(e))})})},R=()=>{if(p){x.debug(`Skipping reconnection (intentional disconnect)`);return}if(kt(m??``)){x.debug(`Skipping reconnection (non-retryable error)`);return}if(d>=i){x.error(`Max reconnection attempts (${i}) reached. Giving up.`,m?`Last error: ${m}`:``),C(`disconnected`);return}let e=Math.min(o*2**d,s);d++,x.debug(`Scheduling reconnection attempt ${d} in ${e}ms...`),C(`reconnecting`),f=setTimeout(()=>{x.debug(`Attempting to reconnect (attempt ${d})...`),z()},e)},z=()=>{T(),C(`connecting`);let e=G.getWebSocketAgent(t);l=new J.default(t,e?{agent:e}:{}),l.on(`message`,e=>{let t;try{t=JSON.parse(e.toString())}catch(t){x.error({data:e,error:t},`Failed to parse JSON message`);return}switch(t.type){case`screenshot`:{if(!(`dataUri`in t)||typeof t.dataUri!=`string`||!(`id`in t)){x.warn(`Received invalid screenshot message:`,t);break}let e=t;x.debug(`Received screenshot data URI for request ${e.id}.`),N(e.id,{dataUri:e.dataUri});break}case`appExit`:{let e=t,{execId:n,packageName:r,reason:i}=e;if(typeof n!=`string`||typeof r!=`string`||typeof i!=`string`){x.warn(`Received malformed appExit message:`,t);break}let a=v.get(n);if(!a){x.debug(`Received appExit for unknown or already handled execId: ${n}`);break}v.delete(n);let o=Array.isArray(e.logs)?e.logs.map(String):[],s={packageName:r,reason:i,...e.crash?{crash:e.crash}:{},...e.anr?{anr:e.anr}:{}};Promise.resolve().then(()=>a(o,s)).catch(e=>{x.error(`Error in onExit callback for execId ${n}:`,e)});break}case`screenshotResult`:{let e=t,n=F(e);if(n){P(e.id,Error(n));break}let r=typeof e.payload?.dataUri==`string`?e.payload.dataUri:``;if(!r){P(e.id,Error(`Received screenshotResult without payload.dataUri`));break}N(e.id,{dataUri:r});break}case`screenshotError`:{if(!(`message`in t)||!(`id`in t)){x.warn(`Received invalid screenshot error message:`,t);break}let e=t;x.error(`Server reported an error capturing screenshot for request ${e.id}:`,e.message),P(e.id,Error(e.message));break}case`assetResult`:{x.debug(`Received assetResult:`,t);let e=t.url,n=_.get(e);if(!n||n.length===0){x.warn(`Received assetResult for unknown or already handled url: ${t.url}`);break}let r=n.shift();if(n.length===0?_.delete(e):_.set(e,n),clearTimeout(r.timeout),t.result===`success`){x.debug(`Asset result is success`),r.resolve();break}let i=typeof t.message==`string`&&t.message?t.message:`Asset processing failed: ${JSON.stringify(t)}`;x.debug(`Asset result is failure`,i),r.reject(Error(i));break}default:if(I(t)){let e=F(t);e?P(t.id,Error(e)):N(t.id,t.payload??t);break}x.warn(`Received unexpected message type: ${t.type}`)}}),l.on(`error`,e=>{let t=e.message;m=t,x.debug(`WebSocket error:`,t),!j&&(l?.readyState===J.default.CONNECTING||l?.readyState===J.default.OPEN)&&A(e)}),l.on(`close`,()=>{E&&=(clearInterval(E),void 0);let e=!p&&!kt(m??``)&&u!==`disconnected`;C(`disconnected`),x.debug(`Disconnected from server.`),w(`Connection closed`),e?R():kt(m??``)&&(x.error(`Closing connection due to non-retryable error: ${m}`),T(),C(`disconnected`),w(`Non-retryable error`),x.debug(`Non-retryable error. Closing connection.`))}),l.on(`open`,()=>{x.debug(`Connected to ${t}`),d=0,m=void 0,C(`connected`),E=setInterval(()=>{l&&l.readyState===J.default.OPEN&&l.ping()},3e4),j||(j=!0,k({screenshot:B,getElementTree:V,findElement:ee,tap:te,setText:H,pressKey:ne,scrollScreen:re,scrollElement:ie,openUrl:ae,launchApp:U,terminateApp:se,listApps:ce,watchApp:W,playOnMicrophone:le,pushFile:ue,pullFile:de,setCameraVideo:fe,clearCameraVideo:pe,adbShell:me,setWifiBandwidth:he,startRecording:ge,stopRecording:_e,startAppLogCapture:ve,stopAppLogCapture:ye,startEventCapture:be,stopEventCapture:xe,streamAppLogCapture:K,streamEventCapture:Se,keepAlive:Ce,disconnect:we,startAdbTunnel:De,startTunnel:ke,getTunnelStatus:Ae,stopTunnel:je,sendAsset:Me,syncApp:Ne,getConnectionState:Te,onConnectionStateChange:Ee}))})},B=async()=>L(`screenshot`,{}),V=async e=>{let t=await L(`getElementTree`,e??{},3e4+(e?.waitForIdleTimeoutMs??0));return{xml:typeof t.xml==`string`?t.xml:``,nodes:Array.isArray(t.nodes)?t.nodes:[]}},ee=async(e,t=20)=>{let n=await L(`findElement`,{selector:e,limit:t}),r=Array.isArray(n.elements)?n.elements:[];return{elements:r,count:typeof n.count==`number`?n.count:r.length}},te=async e=>{let t=await L(`tap`,e);return{x:Number(t.x??0),y:Number(t.y??0)}},H=async(e,t)=>{let n={text:t};e?.selector&&(n.selector=e.selector),typeof e?.x==`number`&&(n.x=e.x),typeof e?.y==`number`&&(n.y=e.y);let r=await L(`setText`,n);return{textLength:Number(r.textLength??t.length)}},ne=async(e,t)=>{let n={keyName:e,...t?{modifiers:t}:{}},r=await L(`pressKey`,n);return{key:typeof r.key==`string`?r.key:String(e)}},re=async(e,t=6)=>await L(`scrollScreen`,{direction:e,amount:t}),ie=async(e,t,n=6)=>await L(`scrollElement`,{...e,direction:t,amount:n}),ae=async e=>{let t=await L(`openUrl`,{url:e});return{url:typeof t.url==`string`?t.url:e}},oe=async(e,t,n)=>{let r=M(e);v.set(r,t);try{return{execId:r,result:await n(r)}}catch(e){throw v.delete(r),e}},U=async(e,t={})=>{let n=n=>{let r={packageName:e};return t.mode&&(r.mode=t.mode),n&&(r.execId=n),L(`launchApp`,r,6e4)},r=t.onExit?(await oe(`exec`,t.onExit,n)).result:await n();return{packageName:typeof r.packageName==`string`?r.packageName:e}},se=async e=>{await L(`terminateApp`,{packageName:e})},ce=async()=>(await L(`listApps`,{})).apps??[],W=async(e,t)=>{let{execId:n}=await oe(`watch`,t,t=>L(`watchApp`,{packageName:e,execId:t}));return{execId:n,stop:async()=>{v.delete(n),await L(`unwatchApp`,{execId:n})}}},le=async(e,t)=>{if(!e)throw Error(`path must be a non-empty string`);return L(`playOnMicrophone`,{path:e,...t?.once===void 0?{}:{once:t.once}})},ue=async(t,n)=>{let r=n===void 0?`${e.apiUrl}/files`:`${e.apiUrl}/files?path=${encodeURIComponent(n)}`,i=c.createReadStream(t),a=await G.fetch(r,{method:`PUT`,headers:{"Content-Type":`application/octet-stream`,"Content-Length":c.statSync(t).size.toString(),Authorization:`Bearer ${e.token}`},body:i,duplex:`half`});if(!a.ok){let e=await a.text();throw x.debug(`Upload failed: ${a.status} ${e}`),Error(`Upload failed: ${a.status} ${e}`)}return(await a.json()).path},de=async(t,n)=>{await Nt(`${e.apiUrl}/files?path=${encodeURIComponent(t)}`,e.token,n)},fe=async(e,t)=>{let n=await ue(e);await L(`cameraControl`,{action:`setSource`,source:`video`,arg:n,loop:t?.loop??!0})},pe=async()=>{await L(`cameraControl`,{action:`reset`})},me=async(e,t=[],n)=>{if(!e)throw Error(`command must be a non-empty string`);let r=Dr([e,...t]),i=n?.timeoutMs,a=(i??3e4)+15e3,o=await L(`adbShell`,{command:r,...i===void 0?{}:{timeoutMs:i}},a),s=n?.encoding??`utf8`;return{stdout:Buffer.from(o.stdout??``,`base64`).toString(s),stderr:Buffer.from(o.stderr??``,`base64`).toString(s),exitCode:typeof o.exitCode==`number`?o.exitCode:-1,truncated:o.truncated===!0}},he=async e=>{let t={};if(e.downKbps!==void 0&&(wr(`downKbps`,e.downKbps),t.downKbps=e.downKbps),e.upKbps!==void 0&&(wr(`upKbps`,e.upKbps),t.upKbps=e.upKbps),t.downKbps===void 0&&t.upKbps===void 0)throw Error(`setWifiBandwidth requires downKbps, upKbps, or both`);await L(`setWifiBandwidth`,t)},ge=async e=>{let t={...yr(e?.persist)};if(e?.quality!==void 0){if(!Number.isInteger(e.quality)||e.quality<5||e.quality>10)throw Error(`quality must be one of: 5, 6, 7, 8, 9, 10`);t.quality=e.quality}await L(`startRecording`,t)},_e=async t=>{let r={};t.presignedUrl&&(r.upload={presignedUrl:t.presignedUrl}),await L(`stopRecording`,r);let i=Cr(n);return t.localPath&&await Nt(i,e.token,t.localPath),i},ve=async e=>{if(!e.bundleId)throw Error(`bundleId must be a non-empty string`);await L(`startAppLogCapture`,{bundleId:e.bundleId,...yr(e.persist)})},ye=async()=>{await L(`stopAppLogCapture`,{})},be=async e=>{await L(`startEventCapture`,{...yr(e?.persist)})},xe=async()=>{await L(`stopEventCapture`,{})},K=t=>xr({url:`${e.apiUrl}/session/applogs/events`,token:e.token,onEntry:t.onLine,onError:t.onError}),Se=t=>xr({url:`${e.apiUrl}/session/events/events`,token:e.token,onEntry:t.onEvent,onError:t.onError}),Ce=()=>{!l||l.readyState!==J.default.OPEN||l.send(JSON.stringify({type:`keepAlive`,sessionId:O}))},we=()=>{p=!0,T(),C(`disconnected`),w(`Intentional disconnect`),x.debug(`Intentionally disconnected from WebSocket.`)},Te=()=>u,Ee=e=>(y.add(e),()=>{y.delete(e)}),De=async()=>{if(!e.adbUrl)throw Error(`adbUrl is required to start an ADB tunnel.`);let t=await Tt(e.adbUrl,e.token,`127.0.0.1`,0,{maxReconnectAttempts:i,reconnectDelay:o,maxReconnectDelay:s,logLevel:r});try{await new Promise((n,r)=>{a(e.adbPath??`adb`,[`connect`,`${t.address.address}:${t.address.port}`],e=>{if(e)return r(e);n()})}),x.debug(`ADB connected on ${t.address.address}`)}catch(e){throw t.close(),e}return t},Oe=()=>{if(!e.adbUrl)throw Error(`adbUrl is required to manage a destination tunnel.`);return e.adbUrl},ke=async t=>or(_n(Oe()),e.token,{selectors:t.selectors,inspection:{enabled:!0,captureBodies:!1,...t.inspection??{}},...t.onInspectionEvent?{onInspectionEvent:t.onInspectionEvent}:{},...t.onInspectionError?{onInspectionError:t.onInspectionError}:{},...t.window===void 0?{}:{window:t.window},logLevel:t.logLevel??r}),Ae=async()=>ur(Oe(),e.token),je=async t=>{await dr(Oe(),e.token,t)},Me=async(e,t)=>{if(!l||l.readyState!==J.default.OPEN)return Promise.reject(Error(`WebSocket is not connected or connection is not open.`));let n={type:`asset`,url:e};return new Promise((r,i)=>{let a,o=setTimeout(()=>{let t=_.get(e);if(!t)return;let n=t.indexOf(a);n>=0&&(t.splice(n,1),i(Error(`Request asset timed out for url: ${e}`))),t.length===0?_.delete(e):_.set(e,t)},t??12e4);a={resolve:r,reject:e=>i(e),timeout:o};let s=_.get(e)??[];s.push(a),_.set(e,s),l.send(JSON.stringify(n),t=>{if(t){clearTimeout(o);let n=_.get(e)??[],r=n.indexOf(a);r>=0&&n.splice(r,1),n.length===0?_.delete(e):_.set(e,n),x.error(`Failed to send asset request:`,t),i(t)}})})},Ne=async(t,n)=>{let r=b.resolve(t);await Tr(r);let i=`limsync-cache-android-${b.basename(r)}-${S.createHash(`sha1`).update(r).digest(`hex`).slice(0,8)}`,a=n?.basisCacheDir??b.join(g.tmpdir(),i),o=(e,t)=>{switch(e){case`debug`:x.debug(t);break;case`info`:x.info(t);break;case`warn`:x.warn(t);break;case`error`:x.error(t);break;default:x.info(t)}};return await c.promises.mkdir(a,{recursive:!0}),await an(r,a,e.apiUrl,e.token,o,n?.onBasisDownloadProgress),await rt(r,{apiUrl:e.apiUrl,token:e.token,udid:i,basisCacheDir:a,install:n?.install??!0,launchMode:n?.launchMode??`ForegroundIfRunning`,watch:n?.watch??!1,ignoreFn:()=>!1,log:o,compression:`identity`,...n?.onSyncComplete?{onSyncComplete:n.onSyncComplete}:{}})};z()})}const kr=()=>{};function Ar(e){return new Promise(t=>setTimeout(t,e))}function jr(e){let t=b.resolve(e),n=S.createHash(`sha1`).update(t).digest(`hex`).slice(0,12),r=b.basename(t,b.extname(t)).replace(/[^A-Za-z0-9._-]+/g,`-`).replace(/^-+|-+$/g,``),i=r===``?`app`:r;return b.join(g.tmpdir(),`limrun-sync-app-${i}-${n}`)}function Mr(e){return b.join(jr(e),`Extracted.app`)}function Nr(e){return e.replace(/\\/g,`/`)}function Pr(e){return e.includes(`\0`)||b.posix.isAbsolute(e)?!0:e.split(`/`).some(e=>e===`..`)}function Fr(e){return e.externalFileAttributes>>>16&65535}function Ir(e){return(Fr(e)&61440)==40960}function Lr(e){return e.fileName.endsWith(`/`)}function Rr(e,t){return Fr(e)&4095||t}async function zr(e){try{return await ee.openPromise(e,{autoClose:!1,lazyEntries:!0,strictFileNames:!0,validateEntrySizes:!0})}catch(t){let n=t instanceof Error?`: ${t.message}`:``;throw Error(`The path is not a valid app bundle directory or ZIP/IPA archive: ${e}${n}`)}}async function Br(e){let t=[];for await(let n of e.eachEntry())t.push(n);return t}async function Vr(e){let t=await c.promises.lstat(e).catch(e=>{if(e.code===`ENOENT`)return null;throw e});t&&(!t.isDirectory()||t.isSymbolicLink())&&await c.promises.rm(e,{recursive:!0,force:!0}),await c.promises.mkdir(e,{recursive:!0})}function Hr(e,t){let n=new Set,r=new Set;for(let t of e){let e=Nr(t.fileName);if(Pr(e))throw Error(`ZIP entry has an unsafe path: ${t.fileName}`);if(Lr(t))continue;let i=e.startsWith(`Payload/`)?e.slice(8):``;if(i===``)continue;let[a,...o]=i.split(`/`);a?.endsWith(`.app`)&&(n.add(a),o.join(`/`)===`Info.plist`&&r.add(a))}if(n.size===0)throw Error(`ZIP/IPA archive contains no Payload/*.app bundle: ${t}`);if(n.size>1)throw Error(`ZIP/IPA archive contains more than one Payload/*.app bundle (${[...n].join(`, `)}); expected exactly one`);let i=[...n][0];if(!r.has(i))throw Error(`ZIP/IPA archive app bundle is missing Info.plist: Payload/${i}/Info.plist`);return i}async function Ur(e,t,n,r){if(Lr(t)){await c.promises.mkdir(n,{recursive:!0,mode:Rr(t,493)});return}if(await c.promises.mkdir(b.dirname(n),{recursive:!0}),Ir(t)){let i=await e.openReadStreamPromise(t),a=[];for await(let e of i)a.push(Buffer.isBuffer(e)?e:Buffer.from(e));let o=Buffer.concat(a).toString(`utf8`),s=b.resolve(b.dirname(n),o),l=b.resolve(r);if(s!==l&&!s.startsWith(l+b.sep))throw Error(`ZIP/IPA symlink escapes app bundle: ${t.fileName} -> ${o}`);await c.promises.rm(n,{force:!0}),await c.promises.symlink(o,n);return}let i=await e.openReadStreamPromise(t);await w(i,c.createWriteStream(n,{mode:Rr(t,420)})),await c.promises.chmod(n,Rr(t,420))}async function Wr(e){let t=b.resolve(e),n=Mr(t);await Vr(b.dirname(n));let r=await zr(t);try{let e=await Br(r),i=Hr(e,t),a=`Payload/${i}/`;await c.promises.rm(n,{recursive:!0,force:!0}),await Vr(n);for(let t of e){let e=Nr(t.fileName);if(e!==`Payload/${i}`&&!e.startsWith(a))continue;let o=e===`Payload/${i}`?``:e.slice(a.length);if(o===``){await c.promises.mkdir(n,{recursive:!0});continue}if(Pr(o))throw Error(`ZIP entry has an unsafe app-relative path: ${t.fileName}`);let s=b.join(n,o.split(`/`).join(b.sep)),l=b.resolve(n),u=b.resolve(s);if(u!==l&&!u.startsWith(l+b.sep))throw Error(`ZIP entry escapes app bundle: ${t.fileName}`);await Ur(r,t,s,n)}return{appPath:n,cacheIdentityPath:t,isArchive:!0,archivePath:t}}finally{r.close()}}async function Gr(e){let t=b.resolve(e),n=await c.promises.stat(t);if(n.isDirectory())return{appPath:t,cacheIdentityPath:t,isArchive:!1};if(!n.isFile())throw Error(`The path is neither an app bundle directory nor a ZIP/IPA archive: ${e}`);return await Wr(t)}async function Kr(e,t){let n=Date.now()+1e4,r;for(;!t()&&Date.now()<n;){let t=await c.promises.stat(e).catch(e=>{if(e.code===`ENOENT`)return null;throw e});if(t?.isFile()){let e={size:t.size,mtimeMs:t.mtimeMs};if(r&&r.size===e.size&&r.mtimeMs===e.mtimeMs)return!0;r=e}else r=void 0;await Ar(100)}return!1}function qr(e){let t=b.resolve(e.archivePath),n=e.log??kr,r=b.dirname(t),i=b.basename(t),a,o=!1,s=!1,l=!1,u,d=async()=>{o=!0;try{if(!await Kr(t,()=>l)){l||n(`warn`,`ZIP/IPA archive did not become readable after change: ${t}`);return}await Wr(t),n(`debug`,`re-extracted ZIP/IPA archive: ${t}`),await e.onExtracted?.()}catch(e){n(`error`,`failed to re-extract ZIP/IPA archive ${t}: ${e instanceof Error?e.message:e}`)}finally{o=!1,s&&!l&&(s=!1,f())}},f=()=>{if(l)return;if(o){s=!0;return}let e=d();u=e,e.finally(()=>{u===e&&(u=void 0)})},p=()=>{l||(a&&clearTimeout(a),a=setTimeout(()=>{a=void 0,f()},500))},m=c.watch(r,(e,t)=>{t?.toString()===i&&p()});return n(`debug`,`watchAppArchive: ${t}`),{close:async()=>{l=!0,s=!1,a&&=(clearTimeout(a),void 0),m.close(),await u}}}async function Jr({localPort:e=0,remoteBaseUrl:t,headers:n={}}){let r=$r(t),i=_.createServer((e,t)=>{let i=e.url||`/`,a=new URL(`${r}${i.startsWith(`/`)?i:`/${i}`}`),o=(a.protocol===`https:`?v:_).request(a,{method:e.method,headers:{...e.headers,host:a.host,...n}},e=>{t.writeHead(e.statusCode??502,e.headers),e.pipe(t)});o.on(`error`,e=>{t.headersSent||t.writeHead(502,{"content-type":`text/plain`}),t.end(e.message)}),e.pipe(o)});await ei(i,e);let a=i.address();if(!a||typeof a==`string`)throw Error(`Failed to start HTTP proxy.`);return{port:a.port,close:()=>ti(i)}}const Yr=new Set([`connection`,`proxy-connection`,`keep-alive`,`proxy-authorization`,`proxy-authenticate`,`te`,`trailer`,`upgrade`]);function Xr(e){return Object.fromEntries(Object.entries(e).filter(([e])=>!Yr.has(e)))}async function Zr({matchPort:e,remoteBaseUrl:t,headers:n={}}){let r=$r(t),i={"http:":new _.Agent({keepAlive:!0}),"https:":new v.Agent({keepAlive:!0})},a=_.createServer((t,a)=>{let o;try{o=new URL(t.url??``)}catch{}if(!o||o.protocol!==`http:`&&o.protocol!==`https:`){a.writeHead(400,{"content-type":`text/plain`}),a.end(`Limrun forward proxy only accepts absolute-form request targets.`);return}if(!Qr(o.hostname)||Number(o.port)!==e){a.writeHead(403,{"content-type":`text/plain`}),a.end(`Limrun forward proxy only forwards 127.0.0.1:${e}.`);return}let s=new URL(`${r}${o.pathname}${o.search}`),c=(s.protocol===`https:`?v:_).request(s,{agent:i[s.protocol],method:t.method,headers:{...Xr(t.headers),host:s.host,...n}},e=>{a.writeHead(e.statusCode??502,Xr(e.headers)),f(e,a,()=>{})});c.on(`error`,e=>{if(a.headersSent){a.destroy(e);return}a.writeHead(502,{"content-type":`text/plain`}),a.end(e.message)}),a.on(`close`,()=>{a.writableFinished||c.destroy()}),f(t,c,()=>{})});a.on(`connect`,(e,t)=>{t.end(`HTTP/1.1 501 Not Implemented\r
|
|
28
|
+
\r
|
|
29
|
+
Limrun forward proxy does not tunnel CONNECT.\r
|
|
30
|
+
`)}),await ei(a,0);let o=a.address();if(!o||typeof o==`string`)throw Error(`Failed to start HTTP forward proxy.`);return{port:o.port,close:async()=>{await ti(a),i[`http:`].destroy(),i[`https:`].destroy()}}}function Qr(e){return e===`localhost`||e===`[::1]`||/^127\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(e)}function $r(e){return e.replace(/\/+$/,``)}function ei(e,t){return new Promise((n,r)=>{e.once(`error`,r),e.listen(t,`127.0.0.1`,()=>{e.off(`error`,r),n()})})}function ti(e){return new Promise((t,n)=>{e.close(e=>{e?n(e):t()})})}const ni=new Set([`openurl`,`launch`,`terminate`,`uninstall`,`privacy`,`location`,`status_bar`]);async function ri(e){let t=await ii({client:e,udid:e.deviceInfo.udid});try{let n=await ai({shimUrl:t.url,udid:e.deviceInfo.udid});return{dir:n,close:async()=>{await t.close(),c.rmSync(n,{recursive:!0,force:!0})}}}catch(e){throw await t.close().catch(()=>{}),e}}async function ii({client:e,udid:t}){let n=_.createServer(async(n,r)=>{if(n.method!==`POST`||n.url!==`/xcrun`){vi(r,404,{code:127,stdout:``,stderr:`not found`});return}try{vi(r,200,await oi(e,t,(await _i(n)).args??[]))}catch{vi(r,200,{code:1,stdout:``,stderr:`limrun xcrun shim failed to execute the requested command.`})}});await hi(n,0);let r=n.address();if(!r||typeof r==`string`)throw Error(`Failed to start Limrun xcrun shim server.`);return{url:`http://127.0.0.1:${r.port}/xcrun`,close:()=>gi(n)}}async function ai(e){let t=c.mkdtempSync(b.join(g.tmpdir(),`limrun-xcrun-shim-`)),n=b.join(t,`xcrun`);return c.writeFileSync(n,mi(e),`utf8`),c.chmodSync(n,493),t}async function oi(e,t,n){if(n[0]===`devicectl`)return si(n);if(n[0]!==`simctl`)return{code:127,stdout:``,stderr:`unsupported xcrun command: ${n.join(` `)}`};let r=n.slice(1),i=r[0],a=di(i,r);if(i===`list`)return ci(e.deviceInfo.udid,r);if(!ui(a,t))return{code:64,stdout:``,stderr:`unsupported non-Limrun simctl target '${a??``}'.`};if(i===`listapps`){let t=await e.listApps();return{code:0,stdout:`${JSON.stringify(pi(t))}\n`,stderr:``}}if(i===`install`){let t=r[2];return t?(await e.syncApp(t,{install:!0,watch:!1}),{code:0,stdout:``,stderr:``}):{code:64,stdout:``,stderr:`simctl install requires a local .app path.`}}return li(i)||(!i||!ni.has(i)?{code:64,stdout:``,stderr:`limrun xcrun shim does not support simctl ${i??``}.`}:await e.simctl(r).wait())}function si(e){let t=[];for(let n=1;n<e.length;n++){if(e[n]===`--json-output`){n++;continue}e[n].startsWith(`-`)||t.push(e[n])}if(t[0]!==`list`||t[1]!==`devices`)return{code:127,stdout:``,stderr:`unsupported devicectl command: ${e.join(` `)}`};let n=JSON.stringify({result:{devices:[]}}),r=e.indexOf(`--json-output`),i=r===-1?void 0:e[r+1];if(i&&i!==`-`){try{c.writeFileSync(i,n)}catch(e){return{code:1,stdout:``,stderr:`could not write devicectl output to ${i}: ${e instanceof Error?e.message:String(e)}`}}return{code:0,stdout:``,stderr:``}}return{code:0,stdout:`${n}\n`,stderr:``}}function ci(e,t){return t.includes(`-j`)?{code:0,stdout:`${JSON.stringify(fi(e))}\n`,stderr:``}:{code:64,stdout:``,stderr:"limrun xcrun shim only supports `xcrun simctl list -j`."}}function li(e){if(e===`get_app_container`)return{code:64,stdout:``,stderr:`limrun xcrun shim does not support get_app_container because upstream tools expect a local filesystem path.`};if(e===`keychain`)return{code:64,stdout:``,stderr:`limrun xcrun shim does not support simctl keychain in v1.`};if(e===`io`)return{code:64,stdout:``,stderr:`limrun xcrun shim does not support simctl io recordVideo in v1.`};if(e===`push`||e===`addmedia`)return{code:64,stdout:``,stderr:`limrun xcrun shim does not support path-bearing simctl ${e} in v1.`}}function ui(e,t){return e===t||e===`booted`}function di(e,t){return e===`launch`?t.slice(1).find(e=>!e.startsWith(`-`)):t[1]}function fi(e){let t=`com.apple.CoreSimulator.SimRuntime.iOS-18-0`,n=`com.apple.CoreSimulator.SimDeviceType.iPhone-16-Pro`;return{devices:{[t]:[{availability:`(available)`,dataPath:`/tmp/limrun-sim/${e}/data`,logPath:`/tmp/limrun-sim/${e}/logs`,isAvailable:!0,name:process.env.LIMRUN_IOS_DEVICE_NAME||`Limrun iPhone`,state:`Booted`,udid:e,deviceTypeIdentifier:n,availabilityError:null}]},devicetypes:[{bundlePath:``,identifier:n,maxRuntimeVersion:999999,maxRuntimeVersionString:null,minRuntimeVersion:0,minRuntimeVersionString:null,modelIdentifier:`iPhone17,1`,name:`iPhone 16 Pro`,productFamily:`iPhone`}],pairs:{},runtimes:[{availability:`(available)`,bundlePath:``,buildversion:`22A000`,identifier:t,isInternal:!1,isAvailable:!0,name:process.env.LIMRUN_IOS_RUNTIME_NAME||`iOS 18.0`,platform:`iOS`,runtimeRoot:``,supportedDeviceTypes:[],version:`18.0`}]}}function pi(e){return Object.fromEntries(e.map(e=>[e.bundleId,{CFBundleIdentifier:e.bundleId,...e.name?{CFBundleName:e.name}:{}}]))}function mi(e){return`#!/usr/bin/env node
|
|
31
|
+
const http = require('node:http');
|
|
32
|
+
const { spawnSync } = require('node:child_process');
|
|
33
|
+
|
|
34
|
+
const args = process.argv.slice(2);
|
|
35
|
+
const realXcrun = process.env.LIMRUN_REAL_XCRUN || '/usr/bin/xcrun';
|
|
36
|
+
|
|
37
|
+
function delegate() {
|
|
38
|
+
const result = spawnSync(realXcrun, args, { stdio: 'inherit' });
|
|
39
|
+
if (result.error) {
|
|
40
|
+
process.stderr.write(String(result.error.message || result.error) + '\\n');
|
|
41
|
+
process.exit(127);
|
|
42
|
+
}
|
|
43
|
+
process.exit(result.status ?? 1);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function fail(message) {
|
|
47
|
+
process.stderr.write('limrun xcrun shim: ' + message + '\\n');
|
|
48
|
+
process.exit(64);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Physical-device enumeration (e.g. Maestro's device picker) is answered by
|
|
52
|
+
// the shim server; real devicectl does not exist off macOS. Every other
|
|
53
|
+
// devicectl subcommand delegates. Flags can precede the subcommand
|
|
54
|
+
// (devicectl --json-output <path> list devices), so match on positionals.
|
|
55
|
+
function devicectlPositionals(args) {
|
|
56
|
+
const positionals = [];
|
|
57
|
+
for (let i = 1; i < args.length; i++) {
|
|
58
|
+
if (args[i] === '--json-output') {
|
|
59
|
+
i++;
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
if (args[i].startsWith('-')) continue;
|
|
63
|
+
positionals.push(args[i]);
|
|
64
|
+
}
|
|
65
|
+
return positionals;
|
|
66
|
+
}
|
|
67
|
+
const devicectlSubcommand = args[0] === 'devicectl' ? devicectlPositionals(args) : [];
|
|
68
|
+
const isDevicectlListDevices = devicectlSubcommand[0] === 'list' && devicectlSubcommand[1] === 'devices';
|
|
69
|
+
|
|
70
|
+
if (args[0] !== 'simctl' && !isDevicectlListDevices) {
|
|
71
|
+
delegate();
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const shimUrl = ${e?JSON.stringify(e.shimUrl):`process.env.LIMRUN_XCRUN_SHIM_URL`};
|
|
75
|
+
const udid = ${e?JSON.stringify(e.udid):`process.env.LIMRUN_IOS_UDID`};
|
|
76
|
+
if (!shimUrl || !udid) {
|
|
77
|
+
fail('LIMRUN_XCRUN_SHIM_URL and LIMRUN_IOS_UDID are required.');
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function simctlTarget(command, simctlArgs) {
|
|
81
|
+
if (command === 'launch') {
|
|
82
|
+
return simctlArgs.slice(1).find((arg) => !arg.startsWith('-'));
|
|
83
|
+
}
|
|
84
|
+
return simctlArgs[1];
|
|
85
|
+
}
|
|
86
|
+
function isLimrunTarget(value) {
|
|
87
|
+
return value === udid || value === 'booted';
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
if (args[0] === 'simctl') {
|
|
91
|
+
const simctlArgs = args.slice(1);
|
|
92
|
+
const command = simctlArgs[0];
|
|
93
|
+
const target = simctlTarget(command, simctlArgs);
|
|
94
|
+
if (command !== 'list' && !isLimrunTarget(target)) {
|
|
95
|
+
delegate();
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
const parsed = new URL(shimUrl);
|
|
100
|
+
const body = JSON.stringify({ args });
|
|
101
|
+
const req = http.request(parsed, {
|
|
102
|
+
method: 'POST',
|
|
103
|
+
headers: {
|
|
104
|
+
'content-type': 'application/json',
|
|
105
|
+
'content-length': Buffer.byteLength(body),
|
|
106
|
+
},
|
|
107
|
+
}, (res) => {
|
|
108
|
+
const chunks = [];
|
|
109
|
+
res.on('data', (chunk) => chunks.push(chunk));
|
|
110
|
+
res.on('end', () => {
|
|
111
|
+
let payload;
|
|
112
|
+
try {
|
|
113
|
+
payload = JSON.parse(Buffer.concat(chunks).toString('utf8'));
|
|
114
|
+
} catch (error) {
|
|
115
|
+
process.stderr.write('limrun xcrun shim: invalid shim response\\n');
|
|
116
|
+
process.exit(1);
|
|
117
|
+
}
|
|
118
|
+
if (payload.stdout) process.stdout.write(payload.stdout);
|
|
119
|
+
if (payload.stderr) process.stderr.write(payload.stderr);
|
|
120
|
+
process.exit(typeof payload.code === 'number' ? payload.code : 1);
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
req.on('error', (error) => {
|
|
124
|
+
process.stderr.write('limrun xcrun shim: ' + error.message + '\\n');
|
|
125
|
+
process.exit(1);
|
|
126
|
+
});
|
|
127
|
+
req.end(body);
|
|
128
|
+
`}function hi(e,t){return new Promise((n,r)=>{e.once(`error`,r),e.listen(t,`127.0.0.1`,()=>{e.off(`error`,r),n()})})}function gi(e){return new Promise((t,n)=>{e.close(e=>{e?n(e):t()})})}function _i(e){return new Promise((t,n)=>{let r=[];e.on(`data`,e=>r.push(Buffer.from(e))),e.on(`end`,()=>{try{t(JSON.parse(Buffer.concat(r).toString(`utf8`)||`{}`))}catch(e){n(e)}}),e.on(`error`,n)})}function vi(e,t,n){let r=JSON.stringify(n);e.writeHead(t,{"content-type":`application/json`,"content-length":Buffer.byteLength(r)}),e.end(r)}function yi(e){return`${e}/files?name=recording.mp4`}function bi(e,t){let n=new URL(e);if(n.protocol===`https:`)n.protocol=`wss:`;else if(n.protocol===`http:`)n.protocol=`ws:`;else throw Error(`Unsupported apiUrl protocol for reverse tunnel: ${n.protocol}`);return n.pathname=`${n.pathname.replace(/\/+$/,``)}/reverse-tunnel`,n.search=``,n.hash=``,n.searchParams.set(`remotePort`,String(t)),n.toString()}function xi(e){return JSON.parse(e)}var Si;(function(e){e[e.Q5=5]=`Q5`,e[e.Q6=6]=`Q6`,e[e.Q7=7]=`Q7`,e[e.Q8=8]=`Q8`,e[e.Q9=9]=`Q9`,e[e.Q10=10]=`Q10`})(Si||={});var Ci=class extends o{get isRunning(){return!this.completed}constructor(e,{encoding:t=`utf-8`}={}){super(),this.stdoutChunks=[],this.stderrChunks=[],this.stdoutLineBuffer=``,this.stderrLineBuffer=``,this.exitCodeValue=null,this.completed=!1,this.waitPromise=null,this.stopCallback=null,this.stopCallback=e,this.encoding=t}on(e,t){return super.on(e,t)}once(e,t){return super.once(e,t)}off(e,t){return super.off(e,t)}wait(){return this.waitPromise||=new Promise((e,t)=>{if(this.completed){e({code:this.exitCodeValue,stdout:Buffer.concat(this.stdoutChunks).toString(this.encoding),stderr:Buffer.concat(this.stderrChunks).toString(this.encoding)});return}this.once(`exit`,t=>{e({code:t,stdout:Buffer.concat(this.stdoutChunks).toString(this.encoding),stderr:Buffer.concat(this.stderrChunks).toString(this.encoding)})}),this.once(`error`,e=>{t(e)})}),this.waitPromise}stop(){this.stopCallback&&this.stopCallback()}_handleStdout(e){this.stdoutChunks.push(e),this.emit(`stdout`,e),this.stdoutLineBuffer+=e.toString(this.encoding);let t=this.stdoutLineBuffer.split(`
|
|
15
129
|
`);this.stdoutLineBuffer=t.pop()||``;for(let e of t)this.emit(`line-stdout`,e)}_handleStderr(e){this.stderrChunks.push(e),this.emit(`stderr`,e),this.stderrLineBuffer+=e.toString(this.encoding);let t=this.stderrLineBuffer.split(`
|
|
16
|
-
`);this.stderrLineBuffer=t.pop()||``;for(let e of t)this.emit(`line-stderr`,e)}_handleExit(e){this.stdoutLineBuffer&&=(this.emit(`line-stdout`,this.stdoutLineBuffer),``),this.stderrLineBuffer&&=(this.emit(`line-stderr`,this.stderrLineBuffer),``),this.exitCodeValue=e,this.completed=!0,this.emit(`exit`,e)}_handleError(e){this.completed=!0,this.emit(`error`,e)}},Ne=class extends a{constructor(e,t,n,r){super(),this.wsUrl=e,this.subscribeMessage=t,this.ws=null,this.stopped=!1,this.terminateMessageType=n,this.subscriptionId=r,this._connect()}on(e,t){return super.on(e,t)}once(e,t){return super.once(e,t)}off(e,t){return super.off(e,t)}stop(){if(!this.stopped){if(this.stopped=!0,this.ws&&this.ws.readyState===Q.default.OPEN){let e={type:this.terminateMessageType,id:this.subscriptionId};try{this.ws.send(JSON.stringify(e))}catch{}this.ws.close()}this.ws=null,this.emit(`close`)}}_connect(){let e=N.getWebSocketAgent(this.wsUrl);this.ws=new Q.default(this.wsUrl,e?{agent:e}:{}),this.ws.on(`open`,()=>{if(this.stopped){this.ws?.close();return}this.ws?.send(JSON.stringify(this.subscribeMessage),e=>{e&&(this.emit(`error`,e),this.stop())})}),this.ws.on(`message`,e=>{if(!this.stopped)try{let t=JSON.parse(e.toString());if(t.error){this.emit(`error`,Error(t.error));return}if(t.lines&&t.lines.length>0){this.emit(`lines`,t.lines);for(let e of t.lines)this.emit(`line`,e)}}catch{}}),this.ws.on(`error`,e=>{this.stopped||this.emit(`error`,e)}),this.ws.on(`close`,()=>{this.stopped||(this.stopped=!0,this.emit(`close`)),this.ws=null})}};async function Pe(e){let t=`${e.apiUrl.replace(`https://`,`wss://`).replace(`http://`,`ws://`)}/signaling?token=${e.token}`,n=e.logLevel??`info`,r=e.maxReconnectAttempts??6,i=e.reconnectDelay??1e3,a=e.maxReconnectDelay??3e4,s,c=`connecting`,l=0,f,m=!1,h,g=new Map,_=new Map,v=new Set,y={debug:(...e)=>{n===`debug`&&console.log(...e)},info:(...e)=>{(n===`info`||n===`debug`)&&console.log(...e)},warn:(...e)=>{(n===`warn`||n===`info`||n===`debug`)&&console.warn(...e)},error:(...e)=>{n!==`none`&&console.error(...e)}},b=e=>{c!==e&&(c=e,y.debug(`Connection state changed to: ${e}`),v.forEach(t=>{try{t(e)}catch(e){y.error(`Error in connection state callback:`,e)}}))},x=e=>{g.forEach(t=>{clearTimeout(t.timeout),t.reject(Error(e))}),g.clear(),_.forEach(t=>t._handleError(Error(e))),_.clear()},S=()=>{f&&=(clearTimeout(f),void 0),C&&=(clearInterval(C),void 0),s&&=(s.removeAllListeners(),(s.readyState===Q.default.OPEN||s.readyState===Q.default.CONNECTING)&&s.close(),void 0)},C,w=Math.random().toString(36).substring(2,15)+Math.random().toString(36).substring(2,15);return new Promise((n,T)=>{let E=!1,D=()=>{if(m){y.debug(`Skipping reconnection (intentional disconnect)`);return}if($(h??``)){y.error(`Skipping reconnection (non-retryable error): ${h}`),b(`disconnected`);return}if(l>=r){y.error(`Max reconnection attempts (${r}) reached. Giving up.`),b(`disconnected`);return}let e=Math.min(i*2**l,a);l++,y.debug(`Scheduling reconnection attempt ${l} in ${e}ms...`),b(`reconnecting`),f=setTimeout(()=>{y.debug(`Attempting to reconnect (attempt ${l})...`),j()},e)},O=()=>`ts-client-${Date.now()}-${Math.random().toString(36).substring(7)}`,k=(e,t={},n=3e4)=>new Promise((r,i)=>{if(!s||s.readyState!==Q.default.OPEN){i(Error(`WebSocket is not connected or connection is not open.`));return}let a=O(),o=setTimeout(()=>{g.delete(a),i(Error(`Request ${e} timed out`))},n);g.set(a,{resolve:r,reject:i,timeout:o});let c={type:e,id:a,...t};y.debug(`Sending request:`,c),s.send(JSON.stringify(c),t=>{t&&(clearTimeout(o),g.delete(a),y.error(`Failed to send ${e} request:`,t),i(t))})}),A={screenshotResult:e=>({base64:e.base64,width:e.width,height:e.height}),elementTreeResult:e=>e.json,tapResult:()=>void 0,tapElementResult:e=>({elementLabel:e.elementLabel,elementType:e.elementType}),incrementElementResult:e=>({elementLabel:e.elementLabel}),decrementElementResult:e=>({elementLabel:e.elementLabel}),setElementValueResult:e=>({elementLabel:e.elementLabel}),typeTextResult:()=>void 0,pressKeyResult:()=>void 0,toggleKeyboardResult:()=>void 0,launchAppResult:()=>void 0,terminateAppResult:()=>void 0,appLogTailResult:e=>e.logs??``,listAppsResult:e=>JSON.parse(e.apps||`[]`),listOpenFilesResult:e=>e.files||[],deviceInfoResult:e=>({udid:e.udid,screenWidth:e.screenWidth,screenHeight:e.screenHeight,model:e.model}),openUrlResult:()=>void 0,appInstallationResult:e=>({url:e.url||``,bundleId:e.bundleId||``}),startVideoRecordingResult:()=>void 0,stopVideoRecordingResult:()=>void 0,setOrientationResult:()=>void 0,scrollResult:()=>void 0,xcrunResult:e=>({stdout:e.stdout?Buffer.from(e.stdout,`base64`).toString(`utf-8`):``,stderr:e.stderr?Buffer.from(e.stderr,`base64`).toString(`utf-8`):``,exitCode:e.exitCode??-1}),xcodebuildResult:e=>({stdout:e.stdout?Buffer.from(e.stdout,`base64`).toString(`utf-8`):``,stderr:e.stderr?Buffer.from(e.stderr,`base64`).toString(`utf-8`):``,exitCode:e.exitCode??-1})},j=()=>{S(),b(`connecting`);let e=N.getWebSocketAgent(t);s=new Q.default(t,e?{agent:e}:{}),s.on(`message`,e=>{let t;try{t=JSON.parse(e.toString())}catch(t){y.error({data:e,error:t},`Failed to parse JSON message`);return}if(t.type===`simctlStream`){let e=_.get(t.id);if(!e){y.debug(`Received simctl stream for unknown execution: ${t.id}`);return}if(t.stdout)try{e._handleStdout(Buffer.from(t.stdout,`base64`))}catch(e){y.error(`Failed to decode stdout data:`,e)}if(t.stderr)try{e._handleStderr(Buffer.from(t.stderr,`base64`))}catch(e){y.error(`Failed to decode stderr data:`,e)}t.exitCode!==void 0&&(y.debug(`Simctl execution ${t.id} completed with exit code ${t.exitCode}`),e._handleExit(t.exitCode),_.delete(t.id));return}let n=g.get(t.id);if(!n){y.debug(`Received response for unknown or already handled request: ${t.id}`);return}if(clearTimeout(n.timeout),g.delete(t.id),t.error){y.debug(`Server error for ${t.type}: ${t.error}`),n.reject(Error(t.error));return}let r=A[t.type];if(r)try{n.resolve(r(t))}catch(e){n.reject(e)}else y.warn(`Received unexpected message type:`,t.type),n.resolve(t)}),s.on(`error`,e=>{h=e.message,y.error(`WebSocket error:`,e.message),!E&&(s?.readyState===Q.default.CONNECTING||s?.readyState===Q.default.OPEN)&&T(e)}),s.on(`close`,()=>{C&&=(clearInterval(C),void 0);let e=!m&&!$(h??``)&&c!==`disconnected`;b(`disconnected`),y.debug(`Disconnected from server.`),x(`Connection closed`),e?D():$(h??``)&&(y.error(`Closing connection due to non-retryable error: ${h}`),S(),b(`disconnected`),x(`Non-retryable error`),y.debug(`Non-retryable error. Closing connection.`))}),s.on(`open`,async()=>{if(y.debug(`Connected to ${t}`),l=0,h=void 0,b(`connected`),C=setInterval(()=>{s&&s.readyState===Q.default.OPEN&&s.ping()},3e4),!E){try{X=await Y(),y.debug(`Device info fetched:`,X)}catch(e){y.error(`Failed to fetch device info:`,e),T(e);return}E=!0,n({screenshot:M,elementTree:P,tap:F,tapWithScreenSize:I,tapElement:L,incrementElement:R,decrementElement:ee,setElementValue:z,typeText:B,pressKey:te,toggleKeyboard:ne,launchApp:re,terminateApp:V,appLogTail:H,streamAppLog:U,streamSyslog:ie,listApps:W,openUrl:ae,installApp:oe,setOrientation:se,scroll:G,startRecording:K,stopRecording:le,keepAlive:ue,syncApp:q,disconnect:Z,getConnectionState:ge,onConnectionStateChange:_e,simctl:me,xcrun:pe,xcodebuild:J,cp:he,lsof:fe,deviceInfo:X})}})},M=()=>k(`screenshot`),P=e=>k(`elementTree`,{point:e}),F=(e,t)=>k(`tap`,{x:e,y:t,screenWidth:X?.screenWidth,screenHeight:X?.screenHeight}),I=(e,t,n,r)=>k(`tap`,{x:e,y:t,screenWidth:n,screenHeight:r}),L=e=>k(`tapElement`,{selector:e}),R=e=>k(`incrementElement`,{selector:e}),ee=e=>k(`decrementElement`,{selector:e}),z=(e,t)=>k(`setElementValue`,{text:e,selector:t}),B=(e,t)=>k(`typeText`,{text:e,pressEnter:t}),te=(e,t)=>k(`pressKey`,{key:e,modifiers:t}),ne=()=>k(`toggleKeyboard`),re=(e,t)=>k(`launchApp`,{bundleId:e,mode:t}),V=e=>k(`terminateApp`,{bundleId:e}),H=(e,t)=>k(`appLogTail`,{bundleId:e,lines:t}),U=e=>{let n=O();return new Ne(t,{type:`streamAppLog`,id:n,bundleId:e},`streamAppLogTerminate`,n)},ie=()=>{let e=O();return new Ne(t,{type:`streamSyslog`,id:e},`streamSyslogTerminate`,e)},W=()=>k(`listApps`),ae=e=>k(`openUrl`,{url:e}),oe=(e,t)=>k(`appInstallation`,{url:e,md5:t?.md5,launchMode:t?.launchMode}),se=e=>k(`setOrientation`,{orientation:e}),G=(e,t,n)=>k(`scroll`,{direction:e,pixels:t,coordinate:n?.coordinate,momentum:n?.momentum}),K=async e=>{let t={};if(e?.quality!==void 0){if(!Number.isInteger(e.quality)||e.quality<5||e.quality>10)throw Error(`quality must be one of: 5, 6, 7, 8, 9, 10`);t.quality=e.quality}await k(`startVideoRecording`,t)},le=async t=>{await k(`stopVideoRecording`,{upload:t.presignedUrl?{presignedUrl:t.presignedUrl}:void 0});let n=Ae(e.apiUrl);return t.localPath&&await be(n,e.token,t.localPath),n},ue=()=>{!s||s.readyState!==Q.default.OPEN||s.send(JSON.stringify({type:`keepAlive`,sessionId:w}))},q=async(t,n)=>{let r=d.join(t,`Info.plist`);if(!(await o.promises.stat(r).catch(()=>null))?.isFile())throw Error(`The folder is not a valid app bundle: missing Info.plist at ${r}`);if(!X)throw Error(`Device info not available yet; wait for client connection to be established.`);let i=d.resolve(t),a=`limsync-cache-${d.basename(i)}-${p.createHash(`sha1`).update(i).digest(`hex`).slice(0,8)}`,s=n?.basisCacheDir??d.join(u.tmpdir(),a);return await ce(t,{apiUrl:e.apiUrl,token:e.token,udid:a,ignoreFn:await de(t,{basisCacheDir:s}),basisCacheDir:s,log:(e,t)=>{switch(e){case`debug`:y.debug(t);break;case`info`:y.info(t);break;case`warn`:y.warn(t);break;case`error`:y.error(t);break;default:y.info(t)}},install:n?.install??!0,maxPatchBytes:n?.maxPatchBytes??4194304,launchMode:n?.launchMode??`ForegroundIfRunning`,watch:n?.watch??!0})},fe=()=>k(`listOpenFiles`,{kind:`unix`}),pe=e=>k(`xcrun`,{args:e}),J=e=>k(`xcodebuild`,{args:e}),Y=()=>k(`deviceInfo`),X,me=(e,t={})=>{let n=O(),r=new Me(()=>{_.delete(n),t.disconnectOnExit&&(y.debug(`Simctl execution ${n} cancelled, disconnecting due to disconnectOnExit`),Z()),y.debug(`Simctl execution ${n} cancelled`)});if(_.set(n,r),t.disconnectOnExit&&(r.once(`exit`,()=>{y.debug(`Simctl execution ${n} finished, disconnecting due to disconnectOnExit`),Z()}),r.once(`error`,()=>{y.debug(`Simctl execution ${n} errored, disconnecting due to disconnectOnExit`),Z()})),!s||s.readyState!==Q.default.OPEN)return process.nextTick(()=>{r._handleError(Error(`WebSocket is not connected or connection is not open.`)),_.delete(n)}),r;let i={type:`simctl`,id:n,args:e};return y.debug(`Sending simctl request:`,i),s.send(JSON.stringify(i),e=>{e&&(y.error(`Failed to send simctl request:`,e),r._handleError(e),_.delete(n))}),r},he=async(t,n)=>{let r=o.createReadStream(n),i=`${e.apiUrl}/files?name=${encodeURIComponent(t)}`;try{let t=await N.fetch(i,{method:`PUT`,headers:{"Content-Type":`application/octet-stream`,"Content-Length":o.statSync(n).size.toString(),Authorization:`Bearer ${e.token}`},body:r,duplex:`half`});if(!t.ok){let e=await t.text();throw y.debug(`Upload failed: ${t.status} ${e}`),Error(`Upload failed: ${t.status} ${e}`)}return(await t.json()).path}catch(e){throw y.debug(`Failed to upload file ${n}:`,e),e}},Z=()=>{m=!0,S(),b(`disconnected`),x(`Intentional disconnect`),y.debug(`Intentionally disconnected from WebSocket.`)},ge=()=>c,_e=e=>(v.add(e),()=>{v.delete(e)});j()})}export{N as a,ce as i,ke as n,de as r,Pe as t};
|
|
130
|
+
`);this.stderrLineBuffer=t.pop()||``;for(let e of t)this.emit(`line-stderr`,e)}_handleExit(e){this.stdoutLineBuffer&&=(this.emit(`line-stdout`,this.stdoutLineBuffer),``),this.stderrLineBuffer&&=(this.emit(`line-stderr`,this.stderrLineBuffer),``),this.exitCodeValue=e,this.completed=!0,this.emit(`exit`,e)}_handleError(e){this.completed=!0,this.emit(`error`,e)}},wi=class extends o{constructor(e,t,n,r){super(),this.wsUrl=e,this.subscribeMessage=t,this.ws=null,this.stopped=!1,this.terminateMessageType=n,this.subscriptionId=r,this._connect()}on(e,t){return super.on(e,t)}once(e,t){return super.once(e,t)}off(e,t){return super.off(e,t)}stop(){if(!this.stopped){if(this.stopped=!0,this.ws&&this.ws.readyState===J.default.OPEN){let e={type:this.terminateMessageType,id:this.subscriptionId};try{this.ws.send(JSON.stringify(e))}catch{}this.ws.close()}this.ws=null,this.emit(`close`)}}_connect(){let e=G.getWebSocketAgent(this.wsUrl);this.ws=new J.default(this.wsUrl,e?{agent:e}:{}),this.ws.on(`open`,()=>{if(this.stopped){this.ws?.close();return}this.ws?.send(JSON.stringify(this.subscribeMessage),e=>{e&&(this.emit(`error`,e),this.stop())})}),this.ws.on(`message`,e=>{if(!this.stopped)try{let t=JSON.parse(e.toString());if(t.error){this.emit(`error`,Error(t.error));return}if(t.lines&&t.lines.length>0){this.emit(`lines`,t.lines);for(let e of t.lines)this.emit(`line`,e)}}catch{}}),this.ws.on(`error`,e=>{this.stopped||this.emit(`error`,e)}),this.ws.on(`close`,()=>{this.stopped||(this.stopped=!0,this.emit(`close`)),this.ws=null})}};async function Ti(e){let t=`${e.apiUrl.replace(`https://`,`wss://`).replace(`http://`,`ws://`)}/signaling?token=${e.token}`,n=e.logLevel??`info`,r=e.maxReconnectAttempts??6,i=e.reconnectDelay??1e3,a=e.maxReconnectDelay??3e4,o,s=`connecting`,l=0,u,d=!1,f,p=new Map,m=new Map,h=new Map,_=[],v=[],y=new Set,x={debug:(...e)=>{n===`debug`&&console.log(...e)},info:(...e)=>{(n===`info`||n===`debug`)&&console.log(...e)},warn:(...e)=>{(n===`warn`||n===`info`||n===`debug`)&&console.warn(...e)},error:(...e)=>{n!==`none`&&console.error(...e)}},C=e=>{s!==e&&(s=e,x.debug(`Connection state changed to: ${e}`),y.forEach(t=>{try{t(e)}catch(e){x.error(`Error in connection state callback:`,e)}}))},w=e=>{p.forEach(t=>{clearTimeout(t.timeout),t.reject(Error(e))}),p.clear(),m.forEach(t=>t._handleError(Error(e))),m.clear()},T=()=>{u&&=(clearTimeout(u),void 0),M&&=(clearInterval(M),void 0),o&&=(o.removeAllListeners(),(o.readyState===J.default.OPEN||o.readyState===J.default.CONNECTING)&&o.close(),void 0)},E=()=>{let e=_.splice(0);for(let t of e)t().catch(e=>x.warn(`Failed to close xcrun shim:`,e));let t=v.splice(0);for(let e of t)e().catch(e=>x.warn(`Failed to close HTTP proxy:`,e))},D=()=>{T(),E()},O=(e,t,n)=>{let r=h.get(e)??new Map;r.set(t,n),h.set(e,r)},k=(e,t)=>{let n=h.get(e);if(!n)return;let r=n.get(t);if(r)return n.delete(t),n.size===0&&h.delete(e),r},A=(e,t)=>{let n=h.get(e);n&&(n.delete(t),n.size===0&&h.delete(e))},j=()=>{h.clear()},M,N=Math.random().toString(36).substring(2,15)+Math.random().toString(36).substring(2,15);return new Promise((h,E)=>{let P=!1,F=()=>{if(d){x.debug(`Skipping reconnection (intentional disconnect)`);return}if(kt(f??``)){x.error(`Skipping reconnection (non-retryable error): ${f}`),C(`disconnected`),j();return}if(l>=r){x.error(`Max reconnection attempts (${r}) reached. Giving up.`),C(`disconnected`),j();return}let e=Math.min(i*2**l,a);l++,x.debug(`Scheduling reconnection attempt ${l} in ${e}ms...`),C(`reconnecting`),u=setTimeout(()=>{x.debug(`Attempting to reconnect (attempt ${l})...`),ee()},e)},I=()=>`ts-client-${Date.now()}-${Math.random().toString(36).substring(7)}`,L=e=>{if(e.type!==`launchApp`)return`encryptionKey`in e?{...e,encryptionKey:`[REDACTED]`}:e;let t=e.runtime;return{type:e.type,id:e.id,execId:e.execId,bundleId:e.bundleId,mode:e.mode,runtime:t?{kind:t.kind,version:t.version}:void 0}},R=(e,t={},n,r=3e4)=>new Promise((i,a)=>{if(!o||o.readyState!==J.default.OPEN){a(Error(`WebSocket is not connected or connection is not open.`));return}let s=I(),c=setTimeout(()=>{p.delete(s),a(Error(`Request ${e} timed out`))},r);p.set(s,n?{resolve:i,reject:a,timeout:c,transform:n}:{resolve:i,reject:a,timeout:c});let l={type:e,id:s,...t};x.debug(`Sending request:`,L(l)),o.send(JSON.stringify(l),t=>{t&&(clearTimeout(c),p.delete(s),x.error(`Failed to send ${e} request:`,t),a(t))})}),z=e=>e.length===0?[]:e.split(/\r?\n/),B=e=>{if(e.type!==`appExit`)return!1;let{execId:t,bundleId:n,logLineCount:r}=e;if(typeof t!=`string`||typeof n!=`string`||typeof r!=`number`||!Number.isInteger(r)||r<0)return x.warn(`Received malformed appExit message:`,e),!0;let i=k(`appExit`,t);return i?(i(e).catch(e=>{x.error(`Error processing appExit notification for execId ${t}:`,e)}),!0):(x.debug(`Received appExit for unknown or already handled execId: ${t}`),!0)},V={screenshotResult:e=>({base64:e.base64,width:e.width,height:e.height}),elementTreeResult:e=>xi(e.json??`[]`),tapResult:()=>void 0,tapElementResult:e=>({elementLabel:e.elementLabel,elementType:e.elementType,method:e.method}),incrementElementResult:e=>({elementLabel:e.elementLabel}),decrementElementResult:e=>({elementLabel:e.elementLabel}),setElementValueResult:e=>({elementLabel:e.elementLabel}),typeTextResult:()=>void 0,pressKeyResult:()=>void 0,toggleKeyboardResult:()=>void 0,launchAppResult:()=>void 0,terminateAppResult:()=>void 0,appLogTailResult:e=>e.logs??``,listAppsResult:e=>JSON.parse(e.apps||`[]`),listOpenFilesResult:e=>e.files||[],deviceInfoResult:e=>({udid:e.udid,screenWidth:e.screenWidth,screenHeight:e.screenHeight,model:e.model}),openUrlResult:()=>void 0,appInstallationResult:e=>({url:e.url||``,bundleId:e.bundleId||``}),keychainExportResult:()=>void 0,keychainImportResult:e=>({durationMs:e.durationMs??0}),startVideoRecordingResult:()=>void 0,stopVideoRecordingResult:()=>void 0,startAppLogCaptureResult:()=>void 0,stopAppLogCaptureResult:()=>void 0,startEventCaptureResult:()=>void 0,stopEventCaptureResult:()=>void 0,cameraControlResult:()=>void 0,playOnMicrophoneResult:e=>({duration:e.duration??0,once:e.once??!1}),stopMicrophonePlaybackResult:()=>void 0,microphoneStatusResult:e=>e.status??{source:`silence`},setOrientationResult:()=>void 0,scrollResult:()=>void 0,performActionsResult:e=>({results:e.results??[]}),xcrunResult:e=>({stdout:e.stdout?Buffer.from(e.stdout,`base64`).toString(`utf-8`):``,stderr:e.stderr?Buffer.from(e.stderr,`base64`).toString(`utf-8`):``,exitCode:e.exitCode??-1}),xcodebuildResult:e=>({stdout:e.stdout?Buffer.from(e.stdout,`base64`).toString(`utf-8`):``,stderr:e.stderr?Buffer.from(e.stderr,`base64`).toString(`utf-8`):``,exitCode:e.exitCode??-1})},ee=()=>{T(),C(`connecting`);let e=G.getWebSocketAgent(t);o=new J.default(t,e?{agent:e}:{}),o.on(`message`,e=>{let t;try{t=JSON.parse(e.toString())}catch(t){x.error({data:e,error:t},`Failed to parse JSON message`);return}if(B(t))return;if(t.type===`simctlStream`){let e=m.get(t.id);if(!e){x.debug(`Received simctl stream for unknown execution: ${t.id}`);return}if(t.stdout)try{e._handleStdout(Buffer.from(t.stdout,`base64`))}catch(e){x.error(`Failed to decode stdout data:`,e)}if(t.stderr)try{e._handleStderr(Buffer.from(t.stderr,`base64`))}catch(e){x.error(`Failed to decode stderr data:`,e)}t.exitCode!==void 0&&(x.debug(`Simctl execution ${t.id} completed with exit code ${t.exitCode}`),e._handleExit(t.exitCode),m.delete(t.id));return}let n=p.get(t.id);if(!n){x.debug(`Received response for unknown or already handled request: ${t.id}`);return}if(clearTimeout(n.timeout),p.delete(t.id),t.error){x.debug(`Server error for ${t.type}: ${t.error}`),n.reject(Error(t.error));return}let r=n.transform??V[t.type];if(r)try{n.resolve(r(t))}catch(e){n.reject(e)}else x.warn(`Received unexpected message type:`,t.type),n.resolve(t)}),o.on(`error`,e=>{f=e.message,x.error(`WebSocket error:`,e.message),!P&&(o?.readyState===J.default.CONNECTING||o?.readyState===J.default.OPEN)&&E(e)}),o.on(`close`,()=>{M&&=(clearInterval(M),void 0);let e=!d&&!kt(f??``)&&s!==`disconnected`;C(`disconnected`),x.debug(`Disconnected from server.`),w(`Connection closed`),e?F():kt(f??``)&&(x.error(`Closing connection due to non-retryable error: ${f}`),D(),C(`disconnected`),w(`Non-retryable error`),j(),x.debug(`Non-retryable error. Closing connection.`))}),o.on(`open`,async()=>{if(x.debug(`Connected to ${t}`),l=0,f=void 0,C(`connected`),M=setInterval(()=>{o&&o.readyState===J.default.OPEN&&o.ping()},3e4),!P){try{He=await Ve(),x.debug(`Device info fetched:`,He)}catch(e){x.error(`Failed to fetch device info:`,e),E(e);return}P=!0,h({screenshot:H,elementTree:ne,elementTreeRaw:re,tap:ie,tapWithScreenSize:ae,tapElement:se,incrementElement:ce,decrementElement:W,setElementValue:le,typeText:ue,pressKey:de,toggleKeyboard:fe,launchApp:pe,terminateApp:me,appLogTail:he,streamAppLog:ge,streamSyslog:_e,listApps:ve,openUrl:ye,installApp:be,saveKeychain:xe,restoreKeychain:K,setOrientation:Se,scroll:Ce,performActions:we,startRecording:Te,stopRecording:Me,startAppLogCapture:Ee,stopAppLogCapture:De,startEventCapture:Oe,stopEventCapture:ke,streamAppLogCapture:Ae,streamEventCapture:je,playOnMicrophone:Ne,stopMicrophonePlayback:Pe,microphoneStatus:Fe,keepAlive:Ie,syncApp:q,setStoreKitConfig:Ze,clearStoreKitConfig:Qe,discoverStoreKitConfig:$e,softReset:et,startReverseTunnel:tt,startTunnel:nt,getTunnelStatus:it,stopTunnel:at,startHttpProxy:ot,startForwardHttpProxy:st,disconnect:ct,getConnectionState:lt,onConnectionStateChange:ut,simctl:Ue,xcrun:Re,startXcrunShim:ze,xcodebuild:Be,pushFile:Ge,pullFile:Ke,listFiles:qe,deleteFile:Je,setCameraVideo:Ye,clearCameraVideo:Xe,lsof:Le,deviceInfo:He})}})},H=()=>R(`screenshot`),ne=e=>R(`elementTree`,{point:e}),re=e=>R(`elementTree`,{point:e},e=>e.json??``),ie=(e,t)=>R(`tap`,{x:e,y:t,screenWidth:He?.screenWidth,screenHeight:He?.screenHeight}),ae=(e,t,n,r)=>R(`tap`,{x:e,y:t,screenWidth:n,screenHeight:r}),oe=(e,t)=>R(`tapElement`,{selector:e,activate:t?.activate},void 0,t?.timeoutMs??9e4),U=e=>{let t=e instanceof Error?e.message:String(e);return/matched nothing in the accessibility tree|was not found on screen after scrolling|Accessibility element not found for selector/.test(t)},se=async(e,t)=>{if(!t?.scrollSearch)return oe(e,t);if(!He)throw Error(`Device info not available yet; wait for client connection to be established.`);let n=Date.now()+(t.timeoutMs??9e4),r=()=>oe(e,{...t,timeoutMs:Math.max(1,n-Date.now())}),i;try{return await r()}catch(e){if(!U(e))throw e;i=e}let a=Math.round(He.screenHeight*.6);for(let[e,t]of[[`down`,3],[`up`,6]])for(let o=0;o<t&&!(Date.now()>=n);o+=1){await Ce(e,a),await te(300);try{return await r()}catch(e){if(!U(e))throw e;i=e}}let o=i instanceof Error?i.message:String(i);throw Error(`${o} (after client-side scroll search)`)},ce=e=>R(`incrementElement`,{selector:e}),W=e=>R(`decrementElement`,{selector:e}),le=(e,t)=>{let n=t??void 0;return R(`setElementValue`,{text:e,selector:n,focused:!n||void 0})},ue=(e,t,n)=>{let r=n?.requireFocus!==!1&&void 0;return R(`typeText`,{text:e,pressEnter:t,requireFocus:r})},de=(e,t)=>R(`pressKey`,{key:e,modifiers:t}),fe=()=>R(`toggleKeyboard`),pe=(e,t)=>{let n=typeof t==`string`?{mode:t}:t??{},r=typeof t==`object`?t.mode:n.mode;if(n.runtime&&r===`ForegroundIfRunning`)return Promise.reject(Error(`launchApp runtime launches require RelaunchIfRunning so runtime injection is applied.`));let i=n.runtime?`RelaunchIfRunning`:n.mode,a=n.onExit,o=a?I():void 0;return o&&a&&O(`appExit`,o,async e=>{let{bundleId:t,logLineCount:n}=e;if(typeof t!=`string`||typeof n!=`number`||!Number.isInteger(n)||n<0){x.warn(`Received malformed appExit payload for execId ${o}:`,e);return}let r=[];try{r=z(await R(`appLogTail`,{bundleId:t,lines:n}))}catch(e){x.error(`Failed to fetch app logs for exit execId ${o}:`,e)}try{await a(r)}catch(e){x.error(`Error in onExit callback for execId ${o}:`,e)}}),R(`launchApp`,{bundleId:e,mode:i,runtime:n.runtime,execId:o}).catch(e=>{throw o&&A(`appExit`,o),e})},me=e=>R(`terminateApp`,{bundleId:e}),he=(e,t)=>R(`appLogTail`,{bundleId:e,lines:t}),ge=e=>{let n=I();return new wi(t,{type:`streamAppLog`,id:n,bundleId:e},`streamAppLogTerminate`,n)},_e=()=>{let e=I();return new wi(t,{type:`streamSyslog`,id:e},`streamSyslogTerminate`,e)},ve=()=>R(`listApps`),ye=e=>R(`openUrl`,{url:e}),be=(e,t)=>R(`appInstallation`,{url:e,md5:t?.md5,launchMode:t?.launchMode},void 0,t?.timeoutMs??12e4),xe=async e=>{await R(`exportKeychain`,{url:e.url,encryptionKey:e.encryptionKey},void 0,12e4)},K=async e=>R(`importKeychain`,{url:e.url,encryptionKey:e.encryptionKey},void 0,12e4),Se=e=>R(`setOrientation`,{orientation:e}),Ce=(e,t,n)=>R(`scroll`,{direction:e,pixels:t,coordinate:n?.coordinate,momentum:n?.momentum}),we=(e,t)=>{let n=e.reduce((e,t)=>e+(t.type===`wait`?Math.max(0,t.durationMs):0),0),r=t?.timeoutMs??3e4+n+e.length*2e3;return R(`performActions`,{actions:e},void 0,r)},Te=async e=>{let t={...yr(e?.persist)};if(e?.quality!==void 0){if(!Number.isInteger(e.quality)||e.quality<5||e.quality>10)throw Error(`quality must be one of: 5, 6, 7, 8, 9, 10`);t.quality=e.quality}await R(`startVideoRecording`,t)},Ee=async e=>{if(!e.bundleId)throw Error(`bundleId must be a non-empty string`);await R(`startAppLogCapture`,{bundleId:e.bundleId,...yr(e.persist)})},De=async()=>{await R(`stopAppLogCapture`)},Oe=async e=>{await R(`startEventCapture`,{...yr(e?.persist)})},ke=async()=>{await R(`stopEventCapture`)},Ae=t=>xr({url:`${e.apiUrl}/session/applogs/events`,token:e.token,onEntry:t.onLine,onError:t.onError}),je=t=>xr({url:`${e.apiUrl}/session/events/events`,token:e.token,onEntry:t.onEvent,onError:t.onError}),Me=async t=>{await R(`stopVideoRecording`,{upload:t.presignedUrl?{presignedUrl:t.presignedUrl}:void 0});let n=yi(e.apiUrl);return t.localPath&&await Nt(n,e.token,t.localPath),n},Ne=async(e,t)=>{if(!e)throw Error(`path must be a non-empty string`);return R(`playOnMicrophone`,{path:e,once:t?.once})},Pe=async()=>{await R(`stopMicrophonePlayback`)},Fe=async()=>R(`microphoneStatus`),Ie=()=>{!o||o.readyState!==J.default.OPEN||o.send(JSON.stringify({type:`keepAlive`,sessionId:N}))},q=async(t,n)=>{let r=await Gr(t),i=r.appPath,a=b.join(i,`Info.plist`);if(!(await c.promises.stat(a).catch(()=>null))?.isFile())throw Error(`The folder is not a valid app bundle: missing Info.plist at ${a}`);if(!He)throw Error(`Device info not available yet; wait for client connection to be established.`);let o=b.resolve(r.cacheIdentityPath),s=`limsync-cache-${b.basename(o)}-${S.createHash(`sha1`).update(o).digest(`hex`).slice(0,8)}`,l=n?.basisCacheDir??b.join(g.tmpdir(),s),u=n?.watch??!0,d=(e,t)=>{switch(e){case`debug`:x.debug(t);break;case`info`:x.info(t);break;case`warn`:x.warn(t);break;case`error`:x.error(t);break;default:x.info(t)}},f={apiUrl:e.apiUrl,token:e.token,udid:s,ignoreFn:await dt(i,{basisCacheDir:l,log:d}),basisCacheDir:l,log:d,install:n?.install??!0,launchMode:n?.launchMode??`ForegroundIfRunning`,watch:!r.isArchive&&u,...n?.onSyncComplete?{onSyncComplete:n.onSyncComplete}:{}},p=await rt(i,f);if(!r.isArchive||!r.archivePath||!u)return p;let m=qr({archivePath:r.archivePath,log:d,onExtracted:async()=>{await rt(i,f)}});return{...p,stopWatching:async()=>{await m.close()}}},Le=()=>R(`listOpenFiles`,{kind:`unix`}),Re=e=>R(`xcrun`,{args:e}),ze=async()=>{let e=await ri({deviceInfo:He,listApps:ve,simctl:Ue,syncApp:q});return _.push(e.close),e.dir},Be=e=>R(`xcodebuild`,{args:e}),Ve=()=>R(`deviceInfo`),He,Ue=(e,t={})=>{let n=I(),r=new Ci(()=>{m.delete(n),t.disconnectOnExit&&(x.debug(`Simctl execution ${n} cancelled, disconnecting due to disconnectOnExit`),ct()),x.debug(`Simctl execution ${n} cancelled`)});if(m.set(n,r),t.disconnectOnExit&&(r.once(`exit`,()=>{x.debug(`Simctl execution ${n} finished, disconnecting due to disconnectOnExit`),ct()}),r.once(`error`,()=>{x.debug(`Simctl execution ${n} errored, disconnecting due to disconnectOnExit`),ct()})),!o||o.readyState!==J.default.OPEN)return process.nextTick(()=>{r._handleError(Error(`WebSocket is not connected or connection is not open.`)),m.delete(n)}),r;let i={type:`simctl`,id:n,args:e};return x.debug(`Sending simctl request:`,i),o.send(JSON.stringify(i),e=>{e&&(x.error(`Failed to send simctl request:`,e),r._handleError(e),m.delete(n))}),r},We=(t,n)=>{let r=new URLSearchParams({name:t});return n?.bundleId&&(r.set(`bundleId`,n.bundleId),n.containerType&&r.set(`containerType`,n.containerType)),`${e.apiUrl}/files?${r.toString()}`},Ge=async(t,n,r)=>{let i=c.createReadStream(t),a=We(n,r);try{let n=await G.fetch(a,{method:`PUT`,headers:{"Content-Type":`application/octet-stream`,"Content-Length":c.statSync(t).size.toString(),Authorization:`Bearer ${e.token}`},body:i,duplex:`half`});if(!n.ok){let e=await n.text();throw x.debug(`Upload failed: ${n.status} ${e}`),Error(`Upload failed: ${n.status} ${e}`)}return(await n.json()).path}catch(e){throw x.debug(`Failed to upload file ${t}:`,e),e}},Ke=async(t,n)=>{let r=await G.fetch(We(t,n),{method:`GET`,headers:{Authorization:`Bearer ${e.token}`}});if(!r.ok){let e=await r.text();throw Error(`Download of '${t}' failed: ${r.status} ${e}`)}return Buffer.from(await r.arrayBuffer())},qe=async(t=`.`,n)=>{let r=new URLSearchParams;t&&t!==`.`&&r.set(`path`,t),n?.bundleId&&(r.set(`bundleId`,n.bundleId),n.containerType&&r.set(`containerType`,n.containerType));let i=r.toString(),a=`${e.apiUrl}/files/list${i?`?${i}`:``}`,o=await G.fetch(a,{method:`GET`,headers:{Authorization:`Bearer ${e.token}`}});if(!o.ok){let e=await o.text();throw Error(`Listing of '${t}' failed: ${o.status} ${e}`)}return(await o.json()).entries},Je=async(t,n)=>{let r=await G.fetch(We(t,n),{method:`DELETE`,headers:{Authorization:`Bearer ${e.token}`}});if(!r.ok){let e=await r.text();throw Error(`Deletion of '${t}' failed: ${r.status} ${e}`)}},Ye=async(e,t)=>{let n=`limrun-camera-${b.basename(e)}`,r=await Ge(e,n);await R(`cameraControl`,{action:`setSource`,source:`video`,arg:r,loop:t?.loop??!0})},Xe=()=>R(`cameraControl`,{action:`reset`}),Ze=async(t,n)=>{let r=Buffer.isBuffer(n)?n:Buffer.from(n),i=`${e.apiUrl}/payments/storeKitConfigs/${encodeURIComponent(t)}`,a=await G.fetch(i,{method:`PUT`,headers:{"Content-Type":`application/octet-stream`,Authorization:`Bearer ${e.token}`},body:r});if(!a.ok){let e=await a.text();throw Error(`setStoreKitConfig failed: ${a.status} ${e}`)}},Qe=async t=>{let n=`${e.apiUrl}/payments/storeKitConfigs/${encodeURIComponent(t)}`,r=await G.fetch(n,{method:`DELETE`,headers:{Authorization:`Bearer ${e.token}`}});if(!r.ok){let e=await r.text();throw Error(`clearStoreKitConfig failed: ${r.status} ${e}`)}},$e=async(t,n)=>{let r=n?.timeoutSeconds??120,i=`${e.apiUrl}/payments/storeKitConfigs/${encodeURIComponent(t)}/discover`,a=new AbortController,o=setTimeout(()=>a.abort(),(r+10)*1e3);try{let t=await G.fetch(i,{method:`POST`,headers:{"Content-Type":`application/json`,Authorization:`Bearer ${e.token}`},body:JSON.stringify({timeoutSeconds:r}),signal:a.signal});if(!t.ok){let e=await t.text();throw Error(`discoverStoreKitConfig failed: ${t.status} ${e}`)}let n=await t.json();return{itemsFound:n.itemsFound,productsCount:n.productsCount,subscriptionsCount:n.subscriptionsCount,subscriptionGroupsCount:n.subscriptionGroupsCount}}finally{clearTimeout(o)}},et=async(t,n)=>{let r={bundleId:t};n?.strategy&&(r.strategy=n.strategy);let i=`${e.apiUrl}/softReset`,a=await G.fetch(i,{method:`POST`,headers:{"Content-Type":`application/json`,Authorization:`Bearer ${e.token}`},body:JSON.stringify(r)});if(!a.ok){let e=await a.text();throw Error(`softReset failed: ${a.status} ${e}`)}let o=await a.json(),s={strategy:o.strategy,bundleId:o.bundleId,durationMs:o.durationMs};return o.itemsCleared!==void 0&&(s.itemsCleared=o.itemsCleared),s},tt=async t=>{At(t.remotePort,`remotePort`,57090,57099);let r=t.localPort??t.remotePort;return At(r,`localPort`,1,65535),Et(bi(e.apiUrl,t.remotePort),e.token,{localHost:t.localHost??`127.0.0.1`,localPort:r,logLevel:t.logLevel??n})},nt=async t=>or(_n(e.apiUrl),e.token,{selectors:t.selectors,inspection:Bn(),logLevel:t.logLevel??n}),it=async()=>ur(e.apiUrl,e.token),at=async t=>{await dr(e.apiUrl,e.token,t)},ot=async t=>{At(t.localPort,`localPort`,1,65535);let n=await Jr({localPort:t.localPort,remoteBaseUrl:t.remoteBaseUrl,headers:{authorization:`Bearer ${e.token}`}});return v.push(n.close),n.port},st=async t=>{At(t.matchPort,`matchPort`,1,65535);let n=await Zr({matchPort:t.matchPort,remoteBaseUrl:t.remoteBaseUrl,headers:{authorization:`Bearer ${e.token}`}});return v.push(n.close),n.port},ct=()=>{d=!0,D(),C(`disconnected`),w(`Intentional disconnect`),j(),x.debug(`Intentionally disconnected from WebSocket.`)},lt=()=>s,ut=e=>(y.add(e),()=>{y.delete(e)});ee()})}export{I as C,D,O as E,L as S,z as T,F as _,rt as a,V as b,Ae as c,G as d,te as f,j as g,A as h,dt as i,we as l,N as m,Or as n,Ne as o,M as p,Tt as r,Pe as s,Ti as t,Ce as u,P as v,B as w,k as x,R as y};
|