agent-device 0.20.10 → 0.21.1
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/README.md +2 -2
- package/android/ime-helper/dist/{agent-device-android-ime-helper-0.20.10.apk → agent-device-android-ime-helper-0.21.1.apk} +0 -0
- package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.1.apk.sha256 +1 -0
- package/android/ime-helper/dist/{agent-device-android-ime-helper-0.20.10.manifest.json → agent-device-android-ime-helper-0.21.1.manifest.json} +4 -4
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.1.apk +0 -0
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.1.apk.sha256 +1 -0
- package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.20.10.manifest.json → agent-device-android-snapshot-helper-0.21.1.manifest.json} +6 -6
- package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/AudioProbe.swift +35 -33
- package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/main.swift +6 -1
- package/apple/snapshot-bridge/LICENSE.idb +23 -0
- package/apple/snapshot-bridge/README.md +106 -0
- package/apple/snapshot-bridge/SnapshotBridge.m +286 -0
- package/apple/snapshot-bridge/SnapshotBridgeCapture.h +25 -0
- package/apple/snapshot-bridge/SnapshotBridgeCapture.m +138 -0
- package/apple/snapshot-bridge/SnapshotBridgeRuntime.h +34 -0
- package/apple/snapshot-bridge/SnapshotBridgeRuntime.m +411 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunner/AgentDeviceRunnerApp.m +58 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunner.xcodeproj/project.pbxproj +19 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerAXSnapshotBridge.h +12 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerAXSnapshotBridge.m +20 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerAlertVerification.swift +36 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSelectorMatchPolicy.swift +15 -15
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerStringNormalization.swift +8 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSynthesizedGesture.h +12 -1
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSynthesizedGesture.m +100 -6
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSystemSurfaceHostPolicy.swift +72 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTapPointPolicy.swift +63 -14
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+AXSnapshotFallback.swift +677 -83
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Alert.swift +35 -92
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+AlertObservation.swift +124 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+BlockingSystemModalResolution.swift +39 -4
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandExecution.swift +1058 -213
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandJournal.swift +296 -14
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Environment.swift +1 -1
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Exceptions.swift +10 -10
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Interaction.swift +309 -149
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Keyboard.swift +101 -42
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Lifecycle.swift +24 -17
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Models.swift +124 -199
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Navigation.swift +71 -4
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+PrivateAXElementTypes.swift +12 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+PrivateAXPresentation.swift +211 -78
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+ScreenRecorder.swift +30 -10
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+ScrollGesture.swift +254 -24
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SequenceExecution.swift +206 -22
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Snapshot.swift +465 -494
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotBackendCapabilities.swift +168 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotCapturePlan.swift +802 -247
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotPresentationInvariant.swift +19 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotTiming.swift +185 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedCommitDeadline.swift +206 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedGesturePolicy.swift +83 -5
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedTextEntry.swift +156 -34
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SystemModal.swift +5 -4
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntry.swift +35 -318
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryFocus.swift +206 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryReadiness.swift +158 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextInputCandidatePolicy.swift +28 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextInputProbe.swift +101 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextTyping.swift +56 -23
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Transport.swift +56 -27
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TvRemote.swift +30 -24
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests.swift +126 -80
- package/dist/apple/runner/AgentDeviceRunner/RecordingScripts/RecordingExportSupport.swift +111 -0
- package/dist/apple/runner/AgentDeviceRunner/RecordingScripts/recording-overlay.swift +47 -86
- package/dist/apple/runner/AgentDeviceRunner/RecordingScripts/recording-trim.swift +32 -79
- package/dist/apple/snapshot-presentation/Package.swift +21 -0
- package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotGeometry.swift +56 -0
- package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotModels.swift +259 -0
- package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotPresentation.swift +153 -0
- package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotPresentationFailure.swift +27 -0
- package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotPresentationInvariant.swift +91 -0
- package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotPresentationProjection.swift +161 -0
- package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotScopePolicy.swift +53 -0
- package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotVisibilityFold.swift +242 -0
- package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotVisibilityFoldProjection.swift +97 -0
- package/dist/src/adapter.js +1 -0
- package/dist/src/adb-executor.js +2 -0
- package/dist/src/adb-failure.js +1 -0
- package/dist/src/adb-host.js +1 -0
- package/dist/src/adb.js +1 -0
- package/dist/src/agent-browser-lifecycle.js +1 -0
- package/dist/src/agent-browser-process-record.js +1 -0
- package/dist/src/agent-browser-provider.js +1 -0
- package/dist/src/agent-browser-tool.js +1 -1
- package/dist/src/agent-device-client.js +2 -2
- package/dist/src/ai-sdk.d.ts +2 -2
- package/dist/src/ai-sdk.js +1 -1
- package/dist/src/alert-contract.js +1 -0
- package/dist/src/alert-runtime.js +1 -0
- package/dist/src/android-adb.d.ts +27 -19
- package/dist/src/android-adb.js +1 -1
- package/dist/src/android-input-ownership.js +1 -0
- package/dist/src/android-system-chrome.js +1 -0
- package/dist/src/android.js +1 -1
- package/dist/src/api.js +11 -0
- package/dist/src/app-catalog.js +1 -0
- package/dist/src/app-deployment-resolution.js +2 -0
- package/dist/src/app-helpers.js +1 -1
- package/dist/src/app-inventory-contract.js +1 -0
- package/dist/src/app-inventory.js +1 -0
- package/dist/src/app-launch.js +2 -0
- package/dist/src/app-lifecycle-facade.js +1 -0
- package/dist/src/app-lifecycle.js +3 -6
- package/dist/src/app-lifecycle2.js +2 -2
- package/dist/src/app-lifecycle3.js +1 -0
- package/dist/src/app-log-files.js +1 -1
- package/dist/src/app-log-reconnect.js +1 -1
- package/dist/src/app-log-runtime.js +1 -4
- package/dist/src/app-log-runtime2.js +4 -0
- package/dist/src/app-parsers.js +4 -0
- package/dist/src/app-resolution-cache.js +1 -0
- package/dist/src/app-resolution-facade.js +1 -0
- package/dist/src/app-resolution.js +2 -2
- package/dist/src/app-state.js +1 -2
- package/dist/src/apple-runner-platform.js +1 -0
- package/dist/src/application-lifecycle-interaction.js +1 -0
- package/dist/src/application-lifecycle-runtime.js +1 -0
- package/dist/src/apps-simctl.js +1 -0
- package/dist/src/archive.js +4 -0
- package/dist/src/artifact-download.js +1 -0
- package/dist/src/artifacts.d.ts +6 -2
- package/dist/src/artifacts.js +1 -1
- package/dist/src/async-lifecycle.js +1 -0
- package/dist/src/audio-probe-result.js +1 -0
- package/dist/src/audio-probe-runtime.js +1 -0
- package/dist/src/audio-probe-support.js +1 -0
- package/dist/src/auth-session.js +1 -1
- package/dist/src/auth.js +1 -1
- package/dist/src/backend-snapshot-options.js +1 -1
- package/dist/src/{url.js → base-url.js} +1 -1
- package/dist/src/boot-diagnostics.js +2 -2
- package/dist/src/byte-limit-stream.js +1 -1
- package/dist/src/capabilities.js +1 -0
- package/dist/src/capture.js +1 -0
- package/dist/src/catalog.js +1 -0
- package/dist/src/cli-command-aliases.js +1 -0
- package/dist/src/cli-config.js +1 -1
- package/dist/src/cli-help.js +74 -51
- package/dist/src/cli-output.js +1 -1
- package/dist/src/cli-runner.js +1 -1
- package/dist/src/cli.js +4 -6
- package/dist/src/click-button.js +1 -0
- package/dist/src/client-metro-companion.js +1 -0
- package/dist/src/client-metro.js +1 -1
- package/dist/src/client-types.d.ts +280 -242
- package/dist/src/clipboard.js +1 -0
- package/dist/src/code-signature-cache.js +1 -0
- package/dist/src/code-signature.js +1 -0
- package/dist/src/color.js +1 -0
- package/dist/src/command-metadata.js +1 -1
- package/dist/src/command-schema.js +3 -3
- package/dist/src/command-surface.js +1 -1
- package/dist/src/command-tools.js +2 -2
- package/dist/src/command.js +1 -0
- package/dist/src/compatibility-policy.js +1 -0
- package/dist/src/config.js +1 -1
- package/dist/src/config2.js +1 -0
- package/dist/src/connection-runtime.js +1 -1
- package/dist/src/connection.js +5 -5
- package/dist/src/contracts.d.ts +1 -1
- package/dist/src/contracts.js +1 -1
- package/dist/src/daemon-client-lifecycle.js +1 -0
- package/dist/src/daemon-process.js +1 -0
- package/dist/src/daemon-registration.js +1 -0
- package/dist/src/daemon-shutdown-report.js +1 -1
- package/dist/src/daemon.js +2 -2
- package/dist/src/debug-symbols-facade.js +5 -0
- package/dist/src/deploy-result-target.js +1 -0
- package/dist/src/device-claim-inspection.js +1 -1
- package/dist/src/device-claim-rule.js +1 -0
- package/dist/src/device-input-state.d.ts +190 -3
- package/dist/src/device-inventory-context.js +1 -0
- package/dist/src/device-isolation.js +1 -0
- package/dist/src/device-release.js +1 -0
- package/dist/src/device-rotation.js +1 -0
- package/dist/src/device-selection-resolver.js +1 -0
- package/dist/src/device-session.js +1 -0
- package/dist/src/device.js +1 -1
- package/dist/src/device2.js +3 -2
- package/dist/src/diagnostics.js +3 -0
- package/dist/src/diagnostics2.js +1 -0
- package/dist/src/dispatch-resolve.js +1 -0
- package/dist/src/doctor-facade.js +1 -0
- package/dist/src/doctor-output.js +1 -0
- package/dist/src/doctor.js +1 -0
- package/dist/src/doctor2.js +1 -0
- package/dist/src/doctor3.js +1 -0
- package/dist/src/durable-resource.js +1 -0
- package/dist/src/entities.js +1 -1
- package/dist/src/error.js +2 -0
- package/dist/src/exec.js +1 -0
- package/dist/src/file.js +1 -0
- package/dist/src/find.js +1 -1
- package/dist/src/finders.js +1 -1
- package/dist/src/generic-settle.js +1 -1
- package/dist/src/generic.js +1 -1
- package/dist/src/gesture-admission.js +1 -0
- package/dist/src/gesture-plan-types.js +1 -0
- package/dist/src/gesture-plan.js +1 -0
- package/dist/src/gesture-runtime.js +1 -0
- package/dist/src/harmonyos.js +1 -1
- package/dist/src/hdc.js +1 -1
- package/dist/src/helper.js +2 -2
- package/dist/src/host-file.js +1 -0
- package/dist/src/human-control-contract.js +1 -0
- package/dist/src/human-control.js +1 -0
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/input-actions.js +1 -4
- package/dist/src/input-actions2.js +2 -1
- package/dist/src/install-artifact-facade.js +1 -0
- package/dist/src/install-source-network-transport.js +1 -0
- package/dist/src/install-source.d.ts +3 -10
- package/dist/src/install-source2.js +1 -1
- package/dist/src/interaction-positionals.js +1 -0
- package/dist/src/interaction-ref-policy.js +1 -0
- package/dist/src/interaction.js +1 -1
- package/dist/src/interaction2.js +1 -1
- package/dist/src/interactor-operation-catalog.js +1 -0
- package/dist/src/interactor-types.js +1 -0
- package/dist/src/interactor.js +6 -2
- package/dist/src/interactor2.js +1 -1
- package/dist/src/interactors.js +1 -1
- package/dist/src/internal/bin.d.ts +1 -1
- package/dist/src/internal/bin.js +1 -2
- package/dist/src/internal/companion-tunnel.d.ts +1 -1
- package/dist/src/internal/companion-tunnel.js +1 -1
- package/dist/src/internal/daemon.d.ts +1 -1
- package/dist/src/internal/daemon.js +2 -4
- package/dist/src/internal/png-worker.d.ts +4 -4
- package/dist/src/internal/png-worker.js +1 -1
- package/dist/src/internal/run-script-http-child.d.ts +4 -0
- package/dist/src/internal/run-script-http-child.js +1 -0
- package/dist/src/internal/update-check-entry.d.ts +1 -1
- package/dist/src/inventory.js +4 -4
- package/dist/src/inventory2.js +1 -1
- package/dist/src/inventory3.js +1 -1
- package/dist/src/inventory5.js +1 -1
- package/dist/src/inventory6.js +1 -1
- package/dist/src/ios-client.js +16 -0
- package/dist/src/ios-snapshot-acquisition.js +1 -0
- package/dist/src/ios-snapshot-adapter.js +1 -0
- package/dist/src/ios-snapshot-planning.js +1 -0
- package/dist/src/ios-snapshot-runtime.js +1 -0
- package/dist/src/ios-system-surface.js +1 -0
- package/dist/src/json.js +1 -0
- package/dist/src/keyboard-actions.js +1 -0
- package/dist/src/launch-console.js +1 -0
- package/dist/src/lease-context.js +1 -1
- package/dist/src/lease-scope.js +1 -0
- package/dist/src/lease.js +1 -1
- package/dist/src/limrun-runtime-dependencies.js +1 -1
- package/dist/src/limrun.d.ts +1610 -7
- package/dist/src/limrun.js +1 -1
- package/dist/src/linux.js +1 -1
- package/dist/src/local-interactor-operation-set.js +1 -0
- package/dist/src/location-coordinates.js +1 -1
- package/dist/src/logcat.js +1 -1
- package/dist/src/macos-facade.js +1 -0
- package/dist/src/managed-device-scope.js +1 -0
- package/dist/src/mechanics.js +19 -0
- package/dist/src/metro.d.ts +4 -2
- package/dist/src/metro.js +1 -1
- package/dist/src/metro2.js +1 -1
- package/dist/src/mobile-snapshot-semantics.js +1 -1
- package/dist/src/multitouch-support.js +1 -0
- package/dist/src/numeric.js +1 -0
- package/dist/src/observability.js +1 -1
- package/dist/src/observation.js +2 -0
- package/dist/src/open-target-resolution.js +1 -0
- package/dist/src/output-path.js +1 -1
- package/dist/src/owner-identity.js +3 -1
- package/dist/src/parameterized-recorded-fill.js +1 -0
- package/dist/src/parser.js +1 -1
- package/dist/src/perf-facade.js +2 -0
- package/dist/src/perf-process-identity.js +1 -0
- package/dist/src/perf-runtime-operation-builder.js +1 -0
- package/dist/src/perf-runtime-plan.js +1 -0
- package/dist/src/perf-runtime.js +1 -0
- package/dist/src/perf.js +1 -4
- package/dist/src/physical-device-control.js +1 -1
- package/dist/src/physical-device-facade.js +1 -0
- package/dist/src/platform-request-scope.js +1 -0
- package/dist/src/platform-runtime-android-adb-host.js +1 -0
- package/dist/src/platform-runtime-android-mechanics.js +1 -0
- 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-managed-owner.js +1 -0
- package/dist/src/platform-runtime-network-web-transport.js +1 -1
- package/dist/src/platform-runtime-open-target.js +1 -1
- package/dist/src/platform-runtime-operation-host.js +4 -4
- package/dist/src/platform-runtime-runtime-hints.js +2 -2
- package/dist/src/platform-runtime-screen-recording-android-host.js +1 -1
- package/dist/src/platform-runtime-screen-recording-apple-runner-host.js +1 -1
- package/dist/src/platform-runtime-screen-recording-apple-runner-transport.js +1 -1
- package/dist/src/platform-runtime-screen-recording-apple-simulator-host.js +1 -1
- package/dist/src/platform-runtime-screen-recording-apple-transport.js +1 -1
- package/dist/src/platform-runtime-screen-recording-finalizer-host.js +1 -1
- package/dist/src/platform-runtime-screen-recording-harmony-host.js +1 -1
- package/dist/src/platform-runtime-screen-recording-process-host.js +1 -0
- package/dist/src/platform-runtime-screen-recording-web-host.js +1 -1
- package/dist/src/platform-runtime-unavailable.js +1 -0
- package/dist/src/platform-runtime.js +1 -1
- package/dist/src/platform-runtime2.js +1 -1
- package/dist/src/plist.js +1 -1
- package/dist/src/png-worker-contract.js +1 -1
- package/dist/src/prepare-kind.js +1 -0
- package/dist/src/process-exit.js +1 -1
- package/dist/src/process.js +1 -0
- package/dist/src/provider-device-runtime.js +1 -0
- package/dist/src/provider-session-ownership.js +2 -0
- package/dist/src/provider-webdriver.js +1 -1
- package/dist/src/provider.js +1 -1
- package/dist/src/providers.js +1 -0
- package/dist/src/proxy.js +2 -2
- package/dist/src/react-native-overlay.js +1 -0
- package/dist/src/react-native.js +1 -1
- package/dist/src/record-runtime.js +1 -1
- package/dist/src/record-trace.js +1 -1
- package/dist/src/rect-center.js +1 -0
- package/dist/src/register-builtins.js +1 -0
- package/dist/src/registry.js +40 -28
- package/dist/src/remote-config2.js +1 -1
- package/dist/src/replay-divergence.js +2 -0
- package/dist/src/replay.js +2 -2
- package/dist/src/reporting.js +8 -7
- package/dist/src/request-admission.js +1 -0
- package/dist/src/request-cancel.js +1 -0
- package/dist/src/request-cancellation.js +1 -0
- package/dist/src/request-progress-protocol.js +1 -0
- package/dist/src/request-providers.js +1 -0
- package/dist/src/request-runtime-binding.js +1 -0
- package/dist/src/request.js +1 -0
- package/dist/src/result-serialization.js +1 -0
- package/dist/src/retry.js +1 -0
- package/dist/src/rolldown-runtime.js +1 -1
- package/dist/src/runner-cache-metadata.js +2 -0
- package/dist/src/runner-client.js +1 -1
- package/dist/src/runner-disposal.js +1 -1
- package/dist/src/runner-operations-facade.js +1 -0
- package/dist/src/runner-owner-facade.js +1 -0
- package/dist/src/runner-owner-state.js +1 -0
- package/dist/src/runner-presentation.js +1 -0
- package/dist/src/runner.js +1 -0
- package/dist/src/{runtime-transport.js → runtime-transport-hints.js} +1 -1
- package/dist/src/runtime.js +3 -3
- package/dist/src/runtime2.js +4 -4
- package/dist/src/runtime3.js +1 -1
- package/dist/src/runtime4.js +5 -3
- package/dist/src/runtime5.js +1 -1
- package/dist/src/runtime6.js +1 -1
- package/dist/src/runtime7.js +1 -1
- package/dist/src/runtime8.js +1 -1
- package/dist/src/runtime9.js +1 -1
- package/dist/src/scoped-provider.js +1 -1
- package/dist/src/screen-recording-completion.js +1 -0
- package/dist/src/screen-recording-live-handle.js +1 -0
- package/dist/src/screen-recording-options.js +1 -0
- package/dist/src/screen-recording-resource-recovery.js +1 -0
- package/dist/src/screen-recording-runtime.js +1 -0
- package/dist/src/screenshot-density.js +1 -1
- package/dist/src/screenshot-result.js +1 -6
- package/dist/src/screenshot-runtime.js +1 -0
- package/dist/src/screenshot.js +1 -1
- package/dist/src/screenshot2.js +1 -0
- package/dist/src/screenshot3.js +5 -0
- package/dist/src/script.js +1 -0
- package/dist/src/scroll-command.js +1 -0
- package/dist/src/scroll-gesture.js +1 -0
- package/dist/src/scroll-indicator.js +1 -0
- package/dist/src/sdk-batch-runner.d.ts +23 -6
- package/dist/src/sdk-batch-runner.js +2 -3
- package/dist/src/sdk-batch.js +2 -0
- package/dist/src/sdk-contracts.d.ts +170 -41
- package/dist/src/sdk-contracts.js +2 -2
- package/dist/src/sdk-device.js +1 -1
- package/dist/src/sdk-finders.d.ts +1 -1
- package/dist/src/sdk-finders.js +1 -1
- package/dist/src/sdk-io.js +1 -1
- package/dist/src/sdk-remote-config.d.ts +1 -1
- package/dist/src/sdk-remote-config.js +1 -1
- package/dist/src/sdk-selectors.d.ts +524 -140
- package/dist/src/sdk-selectors.js +1 -1
- package/dist/src/selection.js +1 -0
- package/dist/src/selector-runtime.js +1 -1
- package/dist/src/selectors.js +1 -1
- package/dist/src/semantic-index.js +1 -0
- package/dist/src/server.js +4 -4
- package/dist/src/session-allocation.js +1 -0
- package/dist/src/session-artifact-paths.js +1 -0
- package/dist/src/session-observation.js +1 -0
- package/dist/src/session-paths.js +1 -0
- package/dist/src/session-repair-tombstone.js +1 -0
- package/dist/src/session-routing.js +1 -0
- package/dist/src/session-runtime-admission.js +1 -0
- package/dist/src/session-snapshot.js +1 -0
- package/dist/src/session-store.js +4 -0
- package/dist/src/session-target-evidence.js +1 -1
- package/dist/src/session2.js +5 -27
- package/dist/src/settings.js +1 -0
- package/dist/src/shared.js +2 -2
- package/dist/src/simctl-facade.js +1 -0
- package/dist/src/simctl.js +1 -1
- package/dist/src/simulator-facade.js +1 -0
- package/dist/src/simulator.js +1 -1
- package/dist/src/snapshot-capture-annotations.js +1 -0
- package/dist/src/snapshot-desktop-projection.js +1 -0
- package/dist/src/snapshot-diagnostics.js +1 -0
- package/dist/src/snapshot-process.js +1 -0
- package/dist/src/snapshot-quality-backend-capabilities.js +1 -0
- package/dist/src/snapshot-quality-verdict.js +1 -0
- package/dist/src/snapshot-runtime-binding.js +1 -0
- package/dist/src/snapshot-runtime.js +1 -1
- package/dist/src/snapshot-scope.js +1 -1
- package/dist/src/snapshot-state.js +1 -0
- package/dist/src/snapshot.js +1 -8
- package/dist/src/snapshot2.js +1 -1
- package/dist/src/snapshot3.js +1 -1
- package/dist/src/snapshot4.js +1 -0
- package/dist/src/src.js +1 -1
- package/dist/src/src2.js +1 -1
- package/dist/src/src3.js +1 -2
- package/dist/src/src4.js +1 -1
- package/dist/src/src5.js +1 -0
- package/dist/src/src6.js +1 -0
- package/dist/src/src7.js +2 -0
- package/dist/src/src8.js +115 -0
- package/dist/src/startup-recovery-fence.js +1 -0
- package/dist/src/status-markers.js +1 -0
- package/dist/src/string-enum.js +1 -1
- package/dist/src/success-text.js +1 -0
- package/dist/src/surface-snapshot.js +1 -0
- package/dist/src/surface-snapshot2.js +1 -0
- package/dist/src/takeover.js +5 -0
- package/dist/src/tool-provider-facade.js +1 -0
- package/dist/src/tool-provider.js +4 -3
- package/dist/src/tool-provider2.js +1 -1
- package/dist/src/tool-provider3.js +1 -1
- package/dist/src/toolchain-probe.js +2 -0
- package/dist/src/touch-reference-frame.js +1 -0
- package/dist/src/touch-runtime.js +1 -0
- package/dist/src/transport.js +3 -0
- package/dist/src/tree.js +1 -0
- package/dist/src/ttl-memo.js +1 -0
- package/dist/src/tv-remote.js +1 -0
- package/dist/src/type-text-runtime.js +1 -0
- package/dist/src/undici.js +99 -0
- package/dist/src/update-check.js +1 -1
- package/dist/src/verified-file.js +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/video.js +2 -2
- package/dist/src/web.js +2 -1
- package/dist/src/web2.js +1 -0
- package/dist/src/webdriver-ios-snapshot.js +1 -0
- package/dist/src/webdriver-source.js +1 -0
- package/dist/src/window-state.js +1 -0
- package/linux/atspi-dump.py +54 -9
- package/package.json +58 -35
- package/server.json +9 -3
- package/android/ime-helper/dist/agent-device-android-ime-helper-0.20.10.apk.sha256 +0 -1
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.20.10.apk +0 -0
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.20.10.apk.sha256 +0 -1
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CoordinateTextEntryTests.swift +0 -4
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+FlatSnapshotFiltering.swift +0 -168
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+LifecycleCacheTests.swift +0 -6
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+RecordingTests.swift +0 -4
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SelectorMatchPolicyTests.swift +0 -4
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotPresentation.swift +0 -183
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotPresentationTests.swift +0 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotTraversalIdentityTests.swift +0 -4
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryPolicyTests.swift +0 -4
- package/dist/src/appearance.js +0 -1
- package/dist/src/apps.js +0 -5
- package/dist/src/audio-probe.js +0 -1
- package/dist/src/cli-grammar.js +0 -1
- package/dist/src/command-catalog.js +0 -1
- package/dist/src/debug-symbols.js +0 -5
- package/dist/src/device-input-state.js +0 -2
- package/dist/src/device-ready.js +0 -1
- package/dist/src/dispatch.js +0 -1
- package/dist/src/handler-utils.js +0 -1
- package/dist/src/helper-package-install.js +0 -1
- package/dist/src/host-process.js +0 -3
- package/dist/src/ime-lifecycle.js +0 -2
- package/dist/src/ime-recovery-marker.js +0 -1
- package/dist/src/input-actions3.js +0 -1
- package/dist/src/install-artifact.js +0 -1
- package/dist/src/install-artifact2.js +0 -1
- package/dist/src/interaction-common.js +0 -1
- package/dist/src/interaction-runtime.js +0 -1
- package/dist/src/interaction-snapshot.js +0 -1
- package/dist/src/manifest.js +0 -1
- package/dist/src/method-scope.js +0 -1
- package/dist/src/png-resize.js +0 -1
- package/dist/src/process-lock.js +0 -1
- package/dist/src/runner-lease.js +0 -1
- package/dist/src/runner-sequence.js +0 -1
- package/dist/src/script-source-bundle.js +0 -16
- package/dist/src/sdk-android-adb.d.ts +0 -245
- package/dist/src/sdk-android-adb.js +0 -4
- package/dist/src/sdk.js +0 -1
- package/dist/src/setting-state.js +0 -1
- package/dist/src/shell-quote.js +0 -1
- package/dist/src/snapshot-session.js +0 -1
- package/dist/src/timing-safe-equal.js +0 -1
- package/dist/src/unsupported-interactor.js +0 -1
- package/dist/src/verdict.js +0 -1
- /package/dist/src/{recording-telemetry.js → telemetry.js} +0 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
//#region src/
|
|
1
|
+
//#region packages/capture-kit/src/screenshot-diff-pixels.d.ts
|
|
2
2
|
type ScreenshotDiffPixelsResult = {
|
|
3
3
|
diffData: Buffer;
|
|
4
4
|
diffMask: Uint8Array;
|
|
5
5
|
differentPixels: number;
|
|
6
6
|
};
|
|
7
7
|
//#endregion
|
|
8
|
-
//#region src/
|
|
8
|
+
//#region packages/capture-kit/src/png-rgb-difference.d.ts
|
|
9
9
|
type PngRgbComparisonMetadata = {
|
|
10
10
|
readonly first: {
|
|
11
11
|
readonly width: number;
|
|
@@ -25,7 +25,7 @@ type PngRgbDifferenceResult = PngRgbComparisonMetadata & ({
|
|
|
25
25
|
readonly status: 'dimension_mismatch' | 'data_length_mismatch';
|
|
26
26
|
});
|
|
27
27
|
//#endregion
|
|
28
|
-
//#region src/
|
|
28
|
+
//#region packages/capture-kit/src/png-worker-contract.d.ts
|
|
29
29
|
type PngWorkerJobResult = {
|
|
30
30
|
kind: 'decode';
|
|
31
31
|
width: number;
|
|
@@ -40,7 +40,7 @@ type PngWorkerJobResult = {
|
|
|
40
40
|
kind: 'diff-pixels';
|
|
41
41
|
} & ScreenshotDiffPixelsResult);
|
|
42
42
|
//#endregion
|
|
43
|
-
//#region src/
|
|
43
|
+
//#region packages/capture-kit/src/png-worker.d.ts
|
|
44
44
|
/**
|
|
45
45
|
* Transfers result buffers instead of structured-cloning them, but only when a
|
|
46
46
|
* view fully owns its ArrayBuffer. Exported for direct unit coverage; the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{M as e}from"../sdk-contracts.js";import{a as t,i as n,n as r,r as i,t as a}from"../png-worker-contract.js";import{parentPort as o}from"node:worker_threads";function s(e){switch(e.kind){case`decode`:{let t=n(a(e.png),e.label);return{kind:`decode`,width:t.width,height:t.height,data:t.data}}case`encode`:{let n=new t.PNG({width:e.width,height:e.height});return n.data=a(e.data),{kind:`encode`,png:t.PNG.sync.write(n)}}case`rgb-difference`:{let t=n(a(e.firstPng),e.label),i=n(a(e.secondPng),e.label);return{kind:`rgb-difference`,...r(t,i)}}case`diff-pixels`:return{kind:`diff-pixels`,...i(e)}}}function c(e){return e.buffer instanceof ArrayBuffer&&e.byteOffset===0&&e.byteLength===e.buffer.byteLength}function l(e){return u(e).filter(c).map(e=>e.buffer)}function u(e){switch(e.kind){case`decode`:return[e.data];case`encode`:return[e.png];case`rgb-difference`:return[];case`diff-pixels`:return[e.diffData,e.diffMask]}}const d=o;d&&d.on(`message`,t=>{let n;try{n={id:t.id,ok:!0,result:s(t)}}catch(r){n={id:t.id,ok:!1,error:e(r)}}d.postMessage(n,n.ok?l(n.result):[])});export{l as resultTransferList};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{C as e}from"../sdk-contracts.js";import{n as t,r as n}from"../install-source-network-transport.js";import{t as r}from"../undici.js";import{readFileSync as i}from"node:fs";import a from"node:net";import{pathToFileURL as o}from"node:url";var s=r();async function c(e){return e.publicNetworkOnly?await u(e):await l(e)}async function l(e){if(typeof fetch!=`function`)throw Error(`global fetch is required for Maestro runScript http helpers`);return await y(await fetch(e.url,d(e)))}async function u(t){let n=v(t.url),r=AbortSignal.timeout(3e4),i=new f(n.protocol===`https:`,r);try{return await y(await(0,s.fetch)(n,{...d(t),dispatcher:i,signal:r}),8388608)}catch(t){throw t instanceof TypeError&&t.cause instanceof e?t.cause:t}finally{await i.dispose()}}function d(e){return{method:e.method,headers:e.headers,...e.body===void 0?{}:{body:e.body}}}var f=class extends s.Dispatcher{#e=new Set;#t;#n;constructor(e,t){super(),this.#t=e,this.#n=t}dispatch(e,t){return this.dispatchApproved(e,t).catch(e=>{t.onError?.(e instanceof Error?e:Error(String(e)))}),!0}async dispose(){await Promise.all([...this.#e].map(async e=>await e.close()))}async dispatchApproved(r,i){let a=_(r);if(this.#t&&a.protocol!==`https:`)throw new e(`COMMAND_FAILED`,`Maestro runScript HTTP redirect downgraded HTTPS`);a.protocol===`https:`&&(this.#t=!0);let o=await n(a,this.#n),s=t(a),c=s?m(s,a):p(o.address,o.family);this.#e.add(c),c.dispatch(s?h(r,a,o.address,o.family):r,i)}};function p(e,t){return new s.Agent({connect:{lookup:(n,r,i)=>{if(r.all){i(null,[{address:e,family:t}]);return}i(null,e,t)}}})}function m(e,t){let n=g(t.hostname);return new s.ProxyAgent({uri:e,proxyTunnel:!0,requestTls:t.protocol===`https:`&&a.isIP(n)===0?{servername:n}:void 0})}function h(e,t,n,r){let i=new URL(t);i.hostname=r===6?`[${g(n)}]`:n;let a=Array.isArray(e.headers)?[...e.headers,`host`,t.host]:{...e.headers,host:t.host};return{...e,origin:i.origin,headers:a}}function g(e){return e.startsWith(`[`)&&e.endsWith(`]`)?e.slice(1,-1):e}function _(t){if(!t.origin)throw new e(`INVALID_ARGS`,`Invalid Maestro runScript HTTP URL`);return new URL(t.path,t.origin)}function v(t){try{return new URL(t)}catch{throw new e(`INVALID_ARGS`,`Invalid Maestro runScript HTTP URL`)}}async function y(e,t){return{status:e.status,body:await b(e,t),headers:Object.fromEntries(e.headers.entries())}}async function b(t,n){if(n===void 0)return await t.text();let r=[],i=0,a=t.body?.getReader();if(!a)return``;for(;;){let{done:o,value:s}=await a.read();if(o)break;if(i+=s.byteLength,i>n)throw await a.cancel(),new e(`COMMAND_FAILED`,`Maestro runScript HTTP response exceeded ${n} bytes`,{limitBytes:n,status:t.status});r.push(s)}return Buffer.concat(r,i).toString(`utf8`)}async function x(){let e=await c(JSON.parse(i(0,`utf8`)));process.stdout.write(JSON.stringify(e))}process.argv[1]&&o(process.argv[1]).href===import.meta.url&&x().catch(e=>{console.error(e instanceof Error?e.stack??e.message:String(e)),process.exitCode=1});export{x as runScriptHttpChild};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export {}
|
package/dist/src/inventory.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import{
|
|
2
|
-
`)){let e=n.trim().split(/\s+/),r=e[0];!r||r===`List`||e[1]!==`device`||t.push({serial:r,rawModel:(e.find(e=>e.startsWith(`model:`))??``).replace(`model:`,``)})}return t}function
|
|
3
|
-
`).map(e=>e.trim()).filter(e=>e.length>0)}function
|
|
1
|
+
import{C as e,w as t}from"./sdk-contracts.js";import{a as n,r}from"./adb-failure.js";import i from"node:path";function a(e){return e.startsWith(`emulator-`)}function o(e){return e.toLowerCase().replaceAll(`_`,` `).replaceAll(/\s+/g,` `).trim()}function s(e){let t=[];for(let n of e.split(`
|
|
2
|
+
`)){let e=n.trim().split(/\s+/),r=e[0];!r||r===`List`||e[1]!==`device`||t.push({serial:r,rawModel:(e.find(e=>e.startsWith(`model:`))??``).replace(`model:`,``)})}return t}function c(e){return e.split(`
|
|
3
|
+
`).map(e=>e.trim()).filter(e=>e.length>0)}function l(e){let t=e.split(`
|
|
4
4
|
`).map(e=>e.trim()).filter(e=>e.length>0);return t.at(-1)===`OK`&&t.pop(),t.join(`
|
|
5
|
-
`).trim()||void 0}function
|
|
5
|
+
`).trim()||void 0}function u(e){let t=e.toLowerCase();return t.includes(`tv`)||t.includes(`leanback`)?`tv`:null}function d(e){return/feature:android\.(software\.leanback(_only)?|hardware\.type\.television)\b/i.test(e)}function f(e){return/\b(tv|television)\b/i.test(o(e))?`tv`:`mobile`}const p=[`android.software.leanback`,`android.software.leanback_only`,`android.hardware.type.television`];function m(e,t={sdkRoots:[]}){return{discover:async(n,r)=>await h(e,t,n,r)}}async function h(t,n,r,a){await t.toolchains.prepare(`android`);let o=[...n.sdkRoots,i.join(t.homeDirectory,`Android`,`Sdk`)],s=await _(t,`adb`,o,[`platform-tools`,`adb`]);if(!s)throw new e(`TOOL_MISSING`,`adb not found in PATH`);let c={host:t,adb:s,emulator:await _(t,`emulator`,o,[`emulator`,`emulator`]),scope:a},l=g(r),u=await k((await v(c)).filter(e=>!l||l.has(e.serial)),3,async e=>await y(c,e));return[...u,...r.androidAvdSelection===`running-only`?[]:await T(c,u)]}function g(e){let t=e.serial?.trim(),n=e.androidSerialAllowlist;return t?n?new Set(n.includes(t)?[t]:[]):new Set([t]):n?new Set(n):void 0}async function _(e,t,n,r){for(let t of n){let n=i.join(t,...r);if(await e.files.isExecutable(n))return n}return await e.commands.which(t)}async function v(e){let t=await D(e,e.adb,[`devices`,`-l`]);if(t.exitCode!==0)throw r(`Failed to list Android devices`,t,"Verify adb is running and the device appears in `adb devices`.");return s(t.stdout)}async function y(e,t){let[n,r,i]=await Promise.all([b(e,t),C(e,t.serial),w(e,t.serial)]);return{platform:`android`,id:t.serial,name:n,kind:a(t.serial)?`emulator`:`device`,target:i,booted:r}}async function b(e,t){let n=t.rawModel.replaceAll(`_`,` `).trim();return a(t.serial)?(await x(e,t.serial))?.replaceAll(`_`,` `)||n||t.serial:n||t.serial}async function x(e,t){for(let n of[`ro.boot.qemu.avd_name`,`persist.sys.avd_name`]){let r=await S(e,t,[`shell`,`getprop`,n]),i=r?.stdout.trim();if(r?.exitCode===0&&i)return i}let n=await S(e,t,[`emu`,`avd`,`name`]),r=n&&l(n.stdout);return n?.exitCode===0?r:void 0}async function S(e,n,r){try{return await E(e,n,r)}catch(e){let n=t(e);if(n.code===`COMMAND_FAILED`&&typeof n.details?.timeoutMs==`number`)return;throw e}}async function C(e,t){try{return(await E(e,t,[`shell`,`getprop`,`sys.boot_completed`])).stdout.trim()===`1`}catch(t){if(e.scope.signal.aborted)throw t;return!1}}async function w(e,t){return u(O(await E(e,t,[`shell`,`getprop`,`ro.build.characteristics`])))===`tv`||(await k(p,2,async n=>await E(e,t,[`shell`,`cmd`,`package`,`has-feature`,n]))).some(e=>O(e).toLowerCase().includes(`true`))||d(O(await E(e,t,[`shell`,`pm`,`list`,`features`])))?`tv`:`mobile`}async function T(e,t){if(!e.emulator)return[];let n;try{n=await D(e,e.emulator,[`-list-avds`])}catch(t){if(e.scope.signal.aborted)throw t;return[]}if(n.exitCode!==0)return[];let r=new Set(t.filter(e=>e.kind===`emulator`).map(e=>o(e.name)));return c(n.stdout).filter(e=>!r.has(o(e))).map(e=>({platform:`android`,id:e,name:e,kind:`emulator`,target:f(e),booted:!1}))}async function E(e,t,n){return await D(e,e.adb,[`-s`,t,...n])}async function D(e,t,r){try{return await e.host.commands.run({executable:t,args:r,allowFailure:!0,timeoutMs:1e4},e.scope.signal)}catch(e){throw n(e)}}function O(e){return`${e.stdout}\n${e.stderr}`}async function k(e,t,n){let r=Array(e.length),i=0;return await Promise.all(Array.from({length:Math.min(t,e.length)},async()=>{for(;i<e.length;){let t=i++;r[t]=await n(e[t])}})),r}export{m as createAndroidInventory};
|
package/dist/src/inventory2.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{C as e}from"./sdk-contracts.js";import{C as t}from"./sdk-device.js";const n=/^(iphone|ipad|ipod|appletv|realitydevice)/i,r=/ipad/i,i=/\b(apple vision|vision pro|xros|visionos|realitydevice)\b/i,a=/\b(iphone|ipad|ipod)\b/i,o=/^appletv/i,s=[`apple tv`,`appletv`,`tvos`];function c(e){return(e??``).trim().toLowerCase()}function l(e){return e.includes(`tvos`)}function u(e){return e.includes(`xros`)||e.includes(`visionos`)}function d(e){return l(c(e))?`tv`:`mobile`}function f(e){let t=c(e);return t.includes(`ios`)||t.includes(`tvos`)||t.includes(`xros`)||t.includes(`visionos`)}function p(e){let t=c(e);return s.some(e=>t.includes(e))}function m(e){return a.test(e.trim())}function h(e){return p(e)?`tv`:m(e)||i.test(e)?`mobile`:null}function g(e,t){return e===`tv`?`tvos`:t.some(e=>i.test(e))?`visionos`:t.some(e=>r.test(e))?`ipados`:`ios`}function _(e){return n.test(e.trim())}function v(e){return o.test(e.trim())}function y(e){return[e.name??``,e.deviceProperties?.name??``,e.deviceProperties?.deviceType??``]}function b(e){return e.hardwareProperties?.productType??e.deviceProperties?.productType??``}function x(e){return l(c(e.hardwareProperties?.platform))||v(b(e))||y(e).some(p)?`tv`:`mobile`}function S(e){let t=c(e.hardwareProperties?.platform);return t.includes(`ios`)||l(t)||u(t)||_(b(e))?!0:y(e).some(p)}function C(e){if(!S(e))return null;let t=e.hardwareProperties?.udid??e.identifier??``,n=e.name??e.deviceProperties?.name??t;if(!t)return null;let r=x(e);return{platform:`apple`,id:t,name:n,kind:`device`,target:r,appleOs:g(r,[b(e),...y(e)]),iosPhysicalDeviceBackend:`coredevice`,booted:!0}}const w=/^==\s*(.+?)\s*==$/,T=/^(?<name>.+?)\s+(?:\[(?<idBracket>[^[\]]+)\]|\((?<osVersion>[^)]+)\)\s+\((?<idParen>[^)]+)\))\s*$/;function E(e){let t=[],n=null;for(let r of e.split(/\r?\n/)){let e=r.trim();if(!e)continue;let i=w.exec(e);if(i){n=i[1]?.trim()??null;continue}if(n!==`Devices`)continue;let a=D(e);a&&t.push(a)}return t}function D(e){let t=T.exec(e)?.groups;if(!t)return;let n=t.name?.trim(),r=t.idBracket?.trim()||t.idParen?.trim();if(!n||!r)return;let i=h(n);if(!i)return;let a=t.osVersion?.trim();return{platform:`apple`,id:r,name:n,kind:`device`,target:i,appleOs:g(i,a?[n,a]:[n]),iosPhysicalDeviceBackend:`xctest`,booted:!0}}async function O(e,t){let[n,r]=await Promise.all([k(e,t),A(e,t)]);return j(n,r)}async function k(e,t){let n;try{return n=await e.files.createTemporaryTextFile({prefix:`agent-device-devicectl-`,suffix:`.json`}),(await e.appleTools.run({tool:`devicectl`,args:[`list`,`devices`,`--json-output`,n.path],allowFailure:!0,timeoutMs:8e3},t.signal)).exitCode===0?(JSON.parse(await n.readText()).result?.devices??[]).flatMap(e=>{let t=C(e);return t?[t]:[]}):[]}catch{return t.signal.throwIfAborted(),[]}finally{try{await n?.[Symbol.asyncDispose]()}catch{}}}async function A(e,t){try{let n=await e.appleTools.run({tool:`xctrace`,args:[`list`,`devices`],allowFailure:!0},t.signal);return n.exitCode===0?E(n.stdout):[]}catch{return t.signal.throwIfAborted(),[]}}function j(e,t){let n=new Set(e.map(e=>e.id)),r=[...e];for(let e of t)n.has(e.id)||(n.add(e.id),r.push(e));return r}function M(e){let t=e?.trim();return t?[`--set`,t,`list`,`devices`,`-j`]:[`list`,`devices`,`-j`]}function N(e,t){let n=[];for(let[r,i]of Object.entries(e.devices))if(f(r))for(let e of i){if(!e.isAvailable)continue;let i=d(r);n.push({platform:`apple`,id:e.udid,name:e.name,kind:`simulator`,target:i,appleOs:g(i,[e.deviceTypeIdentifier??``,e.name]),booted:e.state===`Booted`,...t?{simulatorSetPath:t}:{}})}return n}async function P(n,r,i){let a=r.iosSimulatorSetPath?.trim()||void 0,o=await n.appleTools.run({tool:`simctl`,args:M(a),...r.booted===!0?{timeoutMs:3e3}:{}},i.signal),s;try{s=N(JSON.parse(o.stdout),a)}catch(t){throw new e(`COMMAND_FAILED`,`Failed to parse simctl devices JSON`,void 0,t)}for(let e of s)e.booted===!0&&await n.observations.deviceBooted(e);return t(s)}function F(e){return Object.freeze({discover:async(t,n)=>await I(e,t,n)})}async function I(n,r,i){if(L(r))return[R(n)];if(n.hostOs!==`darwin`)throw new e(`UNSUPPORTED_PLATFORM`,`Apple tools are only available on macOS`);if(!await n.appleTools.isXcrunAvailable(i.signal))throw new e(`TOOL_MISSING`,`xcrun not found in PATH`);let a=P(n,r,i);if(r.kind===`simulator`)return await a;if(r.iosSimulatorSetPath||r.udid){let e=await a,o=[...e,R(n)];if(r.iosSimulatorSetPath||e.some(e=>e.id===r.udid))return t(o);let s=await O(n,i);return t(z(o,s))}let[o,s]=await Promise.all([a,O(n,i)]),c=[...o,R(n)];return t(z(c,s))}function L(e){return e.platform===`macos`||e.platform===`apple`&&e.target===`desktop`}function R(e){return{platform:`apple`,id:`host-macos-local`,name:e.hostName,kind:`device`,target:`desktop`,appleOs:`macos`,booted:!0}}function z(e,t){let n=new Set(e.map(e=>e.id));return[...e,...t.filter(e=>!n.has(e.id)&&(n.add(e.id),!0))]}export{F as createAppleInventorySource};
|
package/dist/src/inventory3.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{C as e}from"./sdk-contracts.js";import t from"node:path";function n(e,t={}){return{discover:async(n,r)=>await i(e,t,n,r)}}function r(e){return e.split(`
|
|
2
2
|
`).map(e=>e.trim()).filter(e=>e.length>0&&e!==`[Empty]`)}async function i(t,n,i,l){await t.toolchains.prepare(`harmonyos`);let u=await o(t,a(n));if(!u)throw new e(`TOOL_MISSING`,`hdc not found in PATH`,{hint:`Install HarmonyOS Command Line Tools, then add its sdk/default/openharmony/toolchains directory to PATH.`});let d=await c(t,u,[`list`,`targets`],l);if(d.exitCode!==0)throw new e(`COMMAND_FAILED`,`hdc list targets failed`,{stderr:d.stderr,hint:`Confirm the HarmonyOS emulator or device is running, then run hdc list targets.`});let f=r(d.stdout).filter(e=>!i.serial||i.serial===e);return await Promise.all(f.map(async e=>await s(t,u,e,l)))}function a(e){return[e.hdcSdkPath,e.devecoSdkHome&&t.join(e.devecoSdkHome,`default`,`openharmony`,`toolchains`),e.commandLineToolsHome&&t.join(e.commandLineToolsHome,`sdk`,`default`,`openharmony`,`toolchains`)].filter(e=>e!==void 0)}async function o(e,n){for(let r of n){let n=t.join(r,`hdc`);if(await e.files.isExecutable(n))return n}return await e.commands.which(`hdc`)}async function s(e,t,n,r){let i=[`-t`,n,`shell`,`param`,`get`],[a,o]=await Promise.all([c(e,t,[...i,`const.product.name`],r),c(e,t,[...i,`const.build.characteristics`],r)]),s=a.exitCode===0?a.stdout.trim():``,l=s.toLowerCase()===`emulator`;return{platform:`harmonyos`,id:n,name:s||n,kind:l?`emulator`:`device`,target:o.stdout.toLowerCase().includes(`tv`)?`tv`:`mobile`,booted:!0}}async function c(e,t,n,r){return await e.commands.run({executable:t,args:n,allowFailure:!0,timeoutMs:1e4},r.signal)}export{n as createHarmonyInventory};
|
package/dist/src/inventory5.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{C as e}from"./sdk-contracts.js";import t from"node:path";const n=`VirtualDevice`;function r(e){return{discover:async(t,n)=>await a(e,n)}}function i(e){return l(e).some(c)?[{platform:`vega`,id:n,name:`Vega Virtual Device (${n})`,kind:`emulator`,target:`tv`,booted:!0}]:[]}async function a(t,n){let r=await o(t);if(!r)throw new e(`TOOL_MISSING`,`Vega CLI not found in PATH`,{hint:`Install Vega Developer Tools, source ~/vega/env, and retry devices.`});let a=await t.commands.run({executable:r,args:[`device`,`list`],allowFailure:!0,timeoutMs:1e4},n.signal);s(a);let c=i(a.stdout),u=l(a.stdout);if(c.length===0&&u.length>0)throw new e(`DEVICE_NOT_FOUND`,`Vega CLI found devices, but no supported Vega Virtual Device is running.`,{listedSerials:u,hint:`Start the Vega Virtual Device, then retry with --platform vega --target tv.`});return c}async function o(e){let n=await e.commands.which(`vega`);if(n)return n;let r=t.join(e.homeDirectory,`vega`,`bin`,`vega`);return await e.files.isExecutable(r)?r:void 0}function s(t){if(t.exitCode!==0)throw new e(`COMMAND_FAILED`,`Failed to list Vega devices`,{stdout:t.stdout,stderr:t.stderr,exitCode:t.exitCode,processExitError:!0})}function c(e){return e.toLowerCase()===`virtualdevice`}function l(e){let t=new Set;for(let n of e.split(/\r?\n/)){let e=/^\s*([^\s:]+)\s*:\s*\S/.exec(n)?.[1]?.trim();e&&t.add(e)}return[...t]}export{r as createVegaInventory};
|
package/dist/src/inventory6.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{n as e}from"./device.js";function t(){return{discover:async()=>[e]}}export{t as createWebInventory};
|
|
@@ -0,0 +1,16 @@
|
|
|
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(`
|
|
2
|
+
`).join(`
|
|
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=_()(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)}})),S=n(((e,t)=>{t.exports=typeof process>`u`||process.type===`renderer`||process.browser===!0||process.__nwjs?v():x()})),C=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})),w=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(C(),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)}}})),T=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(S()).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
|
+
\r
|
|
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
|
|
10
|
+
`).join(`\r
|
|
11
|
+
`)),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
|
+
`)+`\r
|
|
13
|
+
\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(`
|
|
15
|
+
`);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};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Rr as e,jr as t}from"./sdk-batch.js";const n={"appium-source":{producer:`appium-source`,acquisitionDepth:{rawTraversal:{kind:`incomplete`},regularPresented:{kind:`incomplete`}},hittabilityEvidence:`unavailable`},"limrun-ios-tree":{producer:`limrun-ios-tree`,acquisitionDepth:{rawTraversal:{kind:`incomplete`},regularPresented:{kind:`incomplete`}},hittabilityEvidence:`unavailable`}},r={"apple-runner":`available`,"simulator-ax-bridge":`available`,"appium-source":`unavailable`,"limrun-ios-tree":`unavailable`};function i(e){return r[e]}function a(e,t){let n=[];return e.hittabilityEvidence===`unavailable`&&n.push({kind:`unavailable-fact`,fact:`hittability`}),(e.acquisitionDepth.rawTraversal.kind===`incomplete`||e.acquisitionDepth.regularPresented.kind===`incomplete`)&&n.push({kind:`unavailable-fact`,fact:`acquisition-depth`}),i(e.producer)===`unavailable`&&n.push({kind:`unavailable-fact`,fact:`truncation`}),t.kind===`missing`&&n.push({kind:`missing-viewport`,reason:t.reason}),Object.freeze(n)}function o(e){let t=n[e.producer];return{stage:`acquired`,acquisition:{producer:e.producer,intent:`full`,nodes:e.nodes,viewport:e.viewport,lineage:e.lineage,residue:a(t,e.viewport)}}}function s(t,n={}){let r=t.filter(c),i=[...r.length>0||n.fallbackToLargestRoot!==!0?r:t].sort(l)[0];if(i)return e(i.rect)?{kind:`reported`,rect:i.rect}:{kind:`missing`,reason:i.rectStatus===`invalid`||i.rectStatus===void 0&&i.rect!==void 0?`invalid`:`not-provided`}}function c(e){let n=t(e.type??``);return n===`application`||n===`window`}function l(e,t){return u(t.rectStatus)-u(e.rectStatus)||d(t.rect)-d(e.rect)}function u(e){return e===`reported`?2:+(e===`invalid`)}function d(t){return t&&e(t)?t.width*t.height:0}export{i as n,s as r,o as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./snapshot.js";import{r as t,t as n}from"./ios-snapshot-acquisition.js";async function r(t){let r=JSON.parse(await t.client.elementTree()),a=i(r,t.client.deviceInfo);return n({producer:`limrun-ios-tree`,nodes:e(r),viewport:a,lineage:{targetId:t.instanceId}})}function i(e,n){let r=t((Array.isArray(e)?e:[e]).map(a));return r?.kind===`reported`?{kind:`derived`,rect:r.rect}:u(n)}function a(e){let t=e.rect??e.frame,n=o(t);return{type:e.elementType??e.type??e.role,...n?{rect:n}:{},rectStatus:l(t,n)}}function o(e){if(s(e))return{x:e.x,y:e.y,width:e.width,height:e.height}}function s(e){return[e?.x,e?.y,e?.width,e?.height].every(c)}function c(e){return typeof e==`number`&&Number.isFinite(e)}const l=(e,t)=>!e||!t?`not-provided`:t.width>0&&t.height>0?`reported`:`invalid`;function u(e){let t=e?.screenWidth,n=e?.screenHeight;return t===void 0||n===void 0?{kind:`missing`,reason:`not-provided`}:!d(t)||!d(n)?{kind:`missing`,reason:`invalid`}:{kind:`reported`,rect:{x:0,y:0,width:t,height:n}}}function d(e){return Number.isFinite(e)&&e>0}export{r as captureLimrunIosSnapshot};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function e(e={}){return Object.freeze({projection:e.projection??(e.raw===!0?`raw`:`regular`),interactiveOnly:e.interactiveOnly===!0,depth:typeof e.depth==`number`?e.depth:null,scope:e.scope?.trim()||null,customActions:e.customActions===!0,acquisitionIntent:e.acquisitionIntent??`full`})}function t(e){return Object.freeze({projection:e.projection,interactiveOnly:e.interactiveOnly,depth:e.depth,scope:e.scope,customActions:e.customActions})}function n(e){let t=e.scope!==null,n=e.projection===`raw`;return Object.freeze({projection:e.projection,rawTraversalDepth:n&&!t?e.depth:null,regularPresentedDepth:!n&&!t?e.depth:null,interactiveOnly:!n&&e.interactiveOnly,customActions:e.customActions,acquisitionIntent:e.acquisitionIntent})}function r(e){return JSON.stringify({producer:e.producer,intent:e.intent,lineage:e.lineage,presentationKey:e.presentationKey,residue:e.residue.map(a).sort()})}function i(e,n){return e.stage===`acquired`?Object.freeze({producer:e.acquisition.producer,intent:e.acquisition.intent,lineage:e.acquisition.lineage,presentationKey:t(n),residue:Object.freeze([...e.acquisition.residue])}):Object.freeze({producer:e.presentation.producer,intent:e.presentation.intent,lineage:e.validation.lineage,presentationKey:e.validation.presentationKey,residue:Object.freeze([...e.validation.residue])})}function a(e){switch(e.kind){case`provider-pruned`:return JSON.stringify({kind:e.kind,fields:[...e.fields].sort()});case`missing-viewport`:return JSON.stringify({kind:e.kind,reason:e.reason});case`truncated`:return JSON.stringify({kind:e.kind,dimension:e.dimension,limit:e.limit});case`stale-generation`:return JSON.stringify({kind:e.kind,expected:e.expected,observed:e.observed});case`unknown-generation`:return JSON.stringify({kind:e.kind,captureId:e.captureId});case`unavailable-fact`:return JSON.stringify({kind:e.kind,fact:e.fact});case`fallback-source`:return JSON.stringify({kind:e.kind,producer:e.producer})}}export{r as a,n as i,t as n,e as r,i as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{C as e,d as t}from"./sdk-contracts.js";import{Lr as n,Rr as r,jr as i}from"./sdk-batch.js";import{i as a,n as o,r as s,t as c}from"./ios-snapshot-planning.js";import{t as l}from"./semantic-index.js";import{a as u,i as d,n as f,o as p,r as m,t as h}from"./runner-presentation.js";const g=new Set([`collectionview`,`scrollview`,`table`]),_=new Set([`application`,`window`]);function v(e,t,i){return!!(e&&r(t)&&n(i,t.x+t.width/2,t.y+t.height/2))}function y(){return{projectedOut:!1}}function b(e,t,n,a,o,s){let c=s===`cursor-projected`?t.ancestorClip:void 0,l=x(e.rect,n,c),u=r(T(e.rect)),d=r(l),f=i(e.type??``),p=ee(s,t.projectedOut,u,d,f,o),m=C(e,S(s,t.projectedOut,u,d)&&!te(e,u,s),a,s),h=ae(f,m,d,o),g=re(s,t.projectedOut,u,d,e);return{isIncluded:m,descendants:ne(s,p,c,l,h),effectiveRect:l,...g?{hiddenContentFrame:g}:{},establishesScrollAnchor:h}}function x(e,t,n){let r=T(e);if(!r)return;let i=O(r,t);return n&&(i=O(i,n)),i}function ee(e,t,n,r,i,a){return e===`plain-viewport`?!r:t||n&&!r&&ie(i,a)}function S(e,t,n,r){return e===`plain-viewport`?r:!t&&(!n||r)}function te(e,t,n){return n!==`cursor-projected`||e.parentIndex===void 0||w(e)||!t?!1:E(e.rect)<=1||D(e.rect)<=1}function ne(e,t,n,r,i){return{projectedOut:t,...e===`cursor-projected`&&i?{ancestorClip:r}:{ancestorClip:n}}}function re(e,t,n,r,i){if(!(e!==`cursor-projected`||t||!n||r))return T(i.rect)}function ie(e,t){return t&&(e===`cell`||g.has(e))}function ae(e,t,n,r){return t&&n&&r&&g.has(e)}function C(e,t,n,r){if(e.parentIndex===void 0)return!0;let a=i(e.type??``);return r===`plain-viewport`&&n&&!t&&a!==`application`?!1:_.has(a)||t}function w(e){return[e.label,e.identifier,e.value].some(e=>typeof e==`string`&&e.trim().length>0)}function T(e){if(e&&[e.x,e.y,e.width,e.height].every(Number.isFinite)&&!(e.width<0||e.height<0))return{...e,width:Math.max(0,e.width),height:Math.max(0,e.height)}}function E(e){return T(e)?.width??0}function D(e){return T(e)?.height??0}function O(e,t){let n=Math.max(e.x,t.x),r=Math.max(e.y,t.y),i=Math.min(e.x+e.width,t.x+t.width),a=Math.min(e.y+e.height,t.y+t.height);return i<=n||a<=r?{x:e.x,y:e.y,width:0,height:0}:{x:i>n?n:e.x,y:a>r?r:e.y,width:i-n,height:a-r}}function k(e,t,n,r,i={}){d(e);let a=A(e),o=new Map,s=[],c=new Map,l=0;for(let u of e){let e=j(u,o,()=>{l+=1}),d=e?.traversal??y(),f=r===`cursor-projected`?e?.anchor:void 0,p=b(u,d,t,n,a.has(u.index),r);M(p,f,c);let m=N(u,p,e,s,t,i),h=F(p,f,m.keptIndex);o.set(u.index,{traversal:p.descendants,anchor:h,keptIndex:m.keptIndex,keptDepth:m.keptDepth})}let u=L(c,s);return{nodes:u,stats:{presentedNodeCount:u.length,sourceNodeCount:e.length,parentClipLookups:l}}}function A(e){let t=new Set;for(let n of e)n.parentIndex!==void 0&&t.add(n.parentIndex);return t}function j(e,t,n){if(e.parentIndex!==void 0)return n(),t.get(e.parentIndex)}function M(e,t,n){e.hiddenContentFrame&&t&&I(e.hiddenContentFrame,t,n)}function N(e,t,n,r,i,a){let o=n?.keptIndex,s=n?.keptDepth??-1;if(!t.isIncluded)return{keptIndex:o,keptDepth:s};let c=r.length;s+=1;let{hittable:l,...u}=e;return r.push({raw:{...u,index:c,depth:s,parentIndex:o,...P(l,e.parentIndex!==void 0,t.effectiveRect,e.enabled!==!1,i,a)},sourceIndex:e.index,...t.effectiveRect?{effectiveRect:t.effectiveRect}:{}}),o=c,{keptIndex:o,keptDepth:s}}function P(e,t,n,r,i,a){return a.hittabilityAvailable===!1?e===!1?{hittable:!1}:{}:{hittable:t&&e===!0&&v(r,n,i)}}function F(e,t,n){return e.establishesScrollAnchor&&n!==void 0&&e.effectiveRect?{index:n,rect:e.effectiveRect}:t}function I(e,t,n){let r=n.get(t.index)??{above:!1,below:!1};e.y+e.height<=t.rect.y?r.above=!0:e.y>=t.rect.y+t.rect.height&&(r.below=!0),n.set(t.index,r)}function L(e,t){return t.map(t=>{let n=e.get(t.raw.index);if(!n)return t;let r=t.raw;return{...t,raw:{...r,hiddenContentAbove:r.hiddenContentAbove===!0||n.above?!0:void 0,hiddenContentBelow:r.hiddenContentBelow===!0||n.below?!0:void 0}}})}const R=new Set([`button`,`cell`,`checkbox`,`collectionview`,`link`,`menuitem`,`picker`,`searchfield`,`securetextfield`,`segmentedcontrol`,`slider`,`scrollview`,`stepper`,`switch`,`tabbar`,`table`,`textfield`,`textview`,`webview`]);function z(e){let t=X(e.nodes),n=H(e,t);return e.projection===`raw`?U(n,e.depth,t):W(n,e.depth)}function B(e){let t=X(e.nodes);return e.projection===`raw`?U(e.nodes,e.depth,t):W(e.nodes,e.depth)}function V(e){return e.parentIndex===void 0||R.has(i(e.type??``))||le(e)}function H(e,t){let n=e.scope?.trim().toLowerCase();if(!n)return[...e.nodes];for(let r=0;r<e.nodes.length;r+=1){let i=e.nodes[r];if(!i||!se(i.raw,n))continue;let a=ce(e.nodes,r,t);if(!(e.projection===`raw`||a.some(t=>V(e.nodes[t].raw))))continue;let o=a.map(t=>e.nodes[t]);return oe(e.projection===`raw`&&e.depth!==null?o.filter(n=>Y(n,t)-Y(i,t)<=e.depth):o,Y(i,t),t)}return[]}function U(e,t,n){let r=t===null?[...e]:e.filter(e=>Y(e,n)<=t);return{nodes:r.map(e=>({...e.raw,rect:e.raw.rect})),sourceIndexes:r.map(e=>e.sourceIndex)}}function W(e,t){let n=[],r=[],i=new Map;for(let a of e){let e=G(a,i),o=K(a,e,t,n.length);if(!o){J(a,e,i);continue}n.push(o),r.push(a.sourceIndex),i.set(a.raw.index,o)}return{nodes:n,sourceIndexes:r}}function G(e,t){return e.raw.parentIndex===void 0?void 0:t.get(e.raw.parentIndex)}function K(e,t,n,r){if(!V(e.raw))return;let i=t?(t.depth??0)+1:0;if(n!==null&&i>n)return;let a=q(e);return{...e.raw,index:r,depth:i,parentIndex:t?.index,...e.effectiveRect?{rect:e.effectiveRect}:{rect:void 0},...a===void 0?{}:{hittable:a}}}function q(e){if(e.raw.hittable!==void 0)return!!(e.raw.hittable===!0&&e.effectiveRect&&e.effectiveRect.width>0&&e.effectiveRect.height>0)}function J(e,t,n){t&&n.set(e.raw.index,t)}function oe(e,t,n){let r=new Map(e.map((e,t)=>[e.raw.index,t]));return e.map((e,i)=>({...e,raw:{...e.raw,index:i,depth:Math.max(0,Y(e,n)-t),parentIndex:e.raw.parentIndex===void 0?void 0:r.get(e.raw.parentIndex)}}))}function se(e,t){return[e.label,e.identifier,e.value].some(e=>typeof e==`string`&&e.toLowerCase().includes(t))}function ce(e,t,n){let r=Y(e[t],n),i=[];for(let a=t;a<e.length&&!(a>t&&Y(e[a],n)<=r);a+=1)i.push(a);return i}function Y(e,t){return Math.max(0,e.raw.depth??t?.get(e.raw.index)??0)}function X(e){let t=new Map;for(let n of e){let e=(n.raw.parentIndex===void 0?-1:t.get(n.raw.parentIndex)??-1)+1;t.set(n.raw.index,n.raw.depth===void 0?e:Math.max(0,n.raw.depth))}return t}function le(e){return[e.label,e.identifier,e.value].some(e=>typeof e==`string`&&e.trim().length>0)}function ue(e,n,r={}){let i=de(e,n,r),a=e.stage===`presented`?e.validation.presentationKey:o(n),s=e.stage===`acquired`?e.acquisition.truncated:e.presentation.payload.truncated;return{payload:{nodes:t(i.nodes),...s===void 0?{}:{truncated:s}},presentationKey:a,comparisonIdentity:c(e,n),residue:e.stage===`acquired`?[...e.acquisition.residue]:[...e.validation.residue]}}function de(e,t,n={}){let r=n.foldPolicy??`cursor-projected`;return e.stage===`acquired`?fe(e.acquisition,t,r):h(e,t,r)}function fe(e,t,n){if(me(e,a(t)),t.projection===`raw`){d(e.nodes);let r=e.nodes.map(e=>({raw:e,sourceIndex:e.index})),i=z({nodes:r,projection:`raw`,scope:t.scope,depth:t.depth,foldPolicy:n}),a=t.scope===null?void 0:B({nodes:r,projection:`raw`,depth:null,foldPolicy:n}).nodes;return{nodes:i.nodes,...a?{qualityNodes:a}:{},presentedIndexesBySourceIndex:Q(e.nodes,i.nodes,i.sourceIndexes,Z(i.nodes)),stats:{presentedNodeCount:i.nodes.length,sourceNodeCount:e.nodes.length,parentClipLookups:0}}}let r=f(e),i=!pe(e.residue),o=k(e.nodes,r,t.interactiveOnly,n,{hittabilityAvailable:i}),s=z({nodes:o.nodes,projection:`regular`,scope:t.scope,depth:t.depth,foldPolicy:n}),c=t.interactiveOnly?l(s.nodes):{nodes:s.nodes,presentedIndexesBySourceIndex:Z(s.nodes)},u=m(c.nodes,`regular`,r,n,i),p=t.scope===null?void 0:B({nodes:o.nodes,projection:`regular`,depth:null,foldPolicy:n}).nodes;return{nodes:c.nodes,...p?{qualityNodes:p}:{},presentedIndexesBySourceIndex:Q(e.nodes,s.nodes,s.sourceIndexes,c.presentedIndexesBySourceIndex),stats:{presentedNodeCount:c.nodes.length,sourceNodeCount:e.nodes.length,parentClipLookups:o.stats.parentClipLookups+u.parentClipLookups}}}function pe(e){return e.some(e=>e.kind===`unavailable-fact`&&e.fact===`hittability`)}function me(e,t){let n=e.hint;if(n.projection!==t.projection||n.rawTraversalDepth!==t.rawTraversalDepth||n.regularPresentedDepth!==t.regularPresentedDepth||n.interactiveOnly!==t.interactiveOnly||n.customActions!==t.customActions||n.acquisitionIntent!==t.acquisitionIntent)throw new u(`projection-mismatch`,`acquired iOS snapshot does not match the requested capture hint`,{projection:n.projection})}function Z(e){return new Map(e.map(e=>[e.index,[e.index]]))}function Q(e,t,n,r){let i=new Map(t.map((e,t)=>[e.index,n[t]])),a=new Map(e.map(e=>[e.index,[]]));for(let[e,t]of r){let n=i.get(e);n!==void 0&&a.set(n,t)}return a}const he={"acquisition-depth":`iOS snapshot acquisition does not report hierarchy completeness; provider-side depth or child limits may omit nodes.`,hittability:`iOS snapshot acquisition does not provide hittability evidence; regular snapshots omit unverified hittability while raw snapshots preserve supplied facts.`,truncation:`iOS snapshot acquisition does not expose truncation metadata; tree completeness is not independently verified.`};function ge(e,t){let n=s({raw:t?.raw,interactiveOnly:t?.interactiveOnly,depth:t?.depth,scope:t?.scope,customActions:t?.customActions,acquisitionIntent:e.acquisition.intent}),r=$(e,n);try{let t=ue(r,n);return{backend:`xctest`,producer:e.acquisition.producer,nodes:[...t.payload.nodes],comparisonIdentity:t.comparisonIdentity,...e.acquisition.truncated===void 0?{}:{truncated:e.acquisition.truncated},..._e(e.acquisition.residue)}}catch(e){ve(e)}}function $(e,t){let n=a(t);return e.acquisition.intent===`full`?{stage:`acquired`,acquisition:{...e.acquisition,intent:`full`,hint:{...n,acquisitionIntent:`full`}}}:{stage:`acquired`,acquisition:{...e.acquisition,intent:`surface-observation`,hint:{...n,acquisitionIntent:`surface-observation`}}}}function _e(e){let t=new Set(e.flatMap(e=>{if(e.kind===`missing-viewport`)return[`iOS snapshot acquisition did not provide a valid viewport (${e.reason}); retry with --raw to inspect the acquired tree, while regular presentation requires viewport evidence.`];if(e.kind!==`unavailable-fact`)return[];let t=he[e.fact];return t?[t]:[]}));return t.size===0?{}:{warnings:[...t]}}function ve(t){if(!(t instanceof u))throw t;let n=p(t),r=t.reason===`missing-viewport`||t.reason===`invalid-viewport`?`Use snapshot --raw to inspect the acquired iOS tree; regular presentation requires valid viewport evidence.`:void 0;throw new e(`COMMAND_FAILED`,t.message,{...n,...r?{hint:r}:{}},t)}export{ge as presentIosSnapshotAcquisition};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime.js";var t=e({IOS_SYSTEM_SURFACE_DISCLOSURE:()=>o,IOS_SYSTEM_SURFACE_HOSTS:()=>n,iosSystemSurfaceOpenRefusal:()=>a,iosSystemSurfaceTransitionDisclosure:()=>s,isIosSystemSurfaceHost:()=>i});const n=Object.freeze([Object.freeze({bundleId:`com.apple.SafariViewService`,kind:`web-auth`,processExecutable:`SafariViewService.app/SafariViewService`})]),r=new Map(n.map(e=>[e.bundleId,e]));function i(e){return e!==void 0&&r.has(e)}function a(e){return`${e} is a system-hosted surface (e.g. a web sign-in sheet) that cannot be opened directly — launching or activating it cancels what it presents. While it is on screen it already appears in this session's snapshots; read it and interact with it there without opening it.`}const o=`A system web sign-in sheet is presented over the app, so this snapshot shows that sheet (hosted out of the app process). Its controls are real and interactive; complete or dismiss the sheet to return to app content.`;function s(e){return e===void 0?`A system web sign-in sheet was presented over the app before this action and is gone now, so this observation describes app content while the pre-action tree described that sheet.`:o}export{i as a,t as i,n,s as r,o as t};
|
package/dist/src/json.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function e(e){process.stdout.write(`${JSON.stringify(e,null,2)}\n`)}export{e as printJson};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=[`status`,`get`,`dismiss`,`enter`,`return`];function t(t){return e.includes(t)}export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=`--launch-console is supported only for iOS simulator app launches`,t=`--launch-console requires a direct app launch and cannot be used with URL opens`;export{e as n,t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{D as e}from"./sdk-batch-runner.js";import{a as t}from"./lease-scope.js";function n(e){return t(e)}function r(t,r){let i=n(t),a=i.leaseId??r?.leaseId,o=i.tenantId??r?.tenantId,s=i.runId??r?.runId;if(!(!o||!s||!a))return e({tenantId:o,runId:s,leaseId:a,leaseBackend:i.leaseBackend??r?.backend,leaseProvider:i.leaseProvider??r?.leaseProvider,deviceKey:i.deviceKey??r?.deviceKey,clientId:i.clientId??r?.clientId,expiresAt:r?.expiresAt})}function i(t,r){let i=n(t),a=r?.lease??r?.deviceLease??void 0;return e({tenantId:i.tenantId??a?.tenantId,runId:i.runId??a?.runId,leaseId:i.leaseId??a?.leaseId,leaseTtlMs:i.leaseTtlMs,leaseBackend:i.leaseBackend??a?.leaseBackend,leaseProvider:i.leaseProvider??a?.leaseProvider,deviceKey:i.deviceKey??a?.deviceKey,clientId:i.clientId??a?.clientId})}function a(t){let n=t.meta,r=e({leaseId:o(n?.leaseId),clientId:o(n?.clientId),tenantId:o(n?.tenantId),runId:o(n?.runId),leaseProvider:o(n?.leaseProvider),deviceKey:o(n?.deviceKey)});return Object.keys(r).length>0?r:void 0}function o(e){return typeof e==`string`&&e.trim().length>0?e.trim():void 0}export{a as i,n,i as r,r as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{D as e}from"./sdk-batch-runner.js";const t=3e5,n=[`leaseId`,`tenantId`,`runId`,`clientId`,`deviceKey`];function r(t){return e({tenantId:t.meta?.tenantId??_(t.flags,`tenant`),runId:t.meta?.runId??_(t.flags,`runId`),leaseId:t.meta?.leaseId??_(t.flags,`leaseId`),leaseTtlMs:t.meta?.leaseTtlMs,leaseBackend:t.meta?.leaseBackend,leaseProvider:t.meta?.leaseProvider??_(t.flags,`leaseProvider`)??_(t.flags,`provider`),deviceKey:t.meta?.deviceKey??_(t.flags,`deviceKey`),clientId:t.meta?.clientId??_(t.flags,`clientId`)})}function i(t){return e({tenantId:t.tenant,runId:t.runId,leaseId:t.leaseId,leaseTtlMs:t.leaseTtlMs??t.ttlMs,leaseBackend:t.leaseBackend,leaseProvider:t.leaseProvider??t.provider,deviceKey:t.deviceKey,clientId:t.clientId})}function a(t){return e({tenantId:t.tenantId,runId:t.runId,leaseId:t.leaseId,leaseTtlMs:t.leaseTtlMs,leaseBackend:t.leaseBackend,leaseProvider:t.leaseProvider,deviceKey:t.deviceKey,clientId:t.clientId})}function o(t){return e({tenant:t.tenantId,runId:t.runId,leaseId:t.leaseId,leaseBackend:t.leaseBackend,leaseProvider:t.leaseProvider,deviceKey:t.deviceKey,clientId:t.clientId})}function s(t){return e({tenantId:t.tenantId??``,runId:t.runId??``,leaseBackend:t.leaseBackend,leaseProvider:t.leaseProvider,deviceKey:t.deviceKey,clientId:t.clientId,ttlMs:t.leaseTtlMs})}function c(e){return g(e)}function l(e){let{ttlMs:t,...n}=g(e);return n}function u(t,n,r){let i=e({...r.includeTokenParam?{token:r.token}:{},session:r.session,tenantId:t.tenantId,runId:t.runId,leaseProvider:t.leaseProvider,clientId:t.clientId,deviceKey:t.deviceKey});switch(n){case`lease_allocate`:return{...i,...e({ttlMs:t.leaseTtlMs,backend:t.leaseBackend})};case`lease_heartbeat`:return{...i,...e({leaseId:t.leaseId,ttlMs:t.leaseTtlMs})};case`lease_release`:return{...i,...e({leaseId:t.leaseId})}}}const d=[`platform`,`device`,`providerApp`,`providerOsVersion`,`providerProject`,`providerBuild`,`providerSessionName`,`providerDeviceOrientation`,`providerGeoLocation`,`providerTimezone`,`providerLanguage`,`providerLocale`,`providerNetworkProfile`,`providerCustomNetwork`,`providerNoResignApp`,`awsProjectArn`,`awsDeviceArn`,`awsAppArn`,`awsRegion`,`awsInteractionMode`];function f(e){let t={};for(let n of d){let r=e?.[n];(typeof r==`string`||typeof r==`boolean`)&&(t[n]=r)}return t}function p(t){let n=e({leaseProvider:t.leaseProvider,deviceKey:t.deviceKey,clientId:t.clientId});return Object.keys(n).length>0?n:void 0}function m(e){return e.leaseProvider===`proxy`}function h(e){return m(e)?n.filter(t=>!e[t]):[]}function g(t){return e({leaseId:t.leaseId??``,tenantId:t.tenantId,runId:t.runId,leaseBackend:t.leaseBackend,leaseProvider:t.leaseProvider,deviceKey:t.deviceKey,clientId:t.clientId,ttlMs:t.leaseTtlMs})}function _(e,t){let n=e?.[t];return typeof n==`string`?n:void 0}export{r as a,p as c,l as d,a as f,i,c as l,h as n,s as o,f as p,m as r,o as s,t,u};
|
package/dist/src/lease.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{C as e,D as t,T as n}from"./sdk-contracts.js";import{d as r,l as i,o as a,r as o}from"./lease-scope.js";import{Qt as s}from"./sdk-batch.js";import{n as c}from"./catalog.js";import{i as l,r as u}from"./request-cancel.js";import"./request.js";import{a as d,n as f}from"./provider-session-ownership.js";import{n as p,r as m}from"./lease-context.js";async function h(e){let{req:t,sessionName:n,sessionStore:o,leaseRegistry:d,providerRuntimeIds:f,providerRuntimeRequiredIds:h,leaseLifecycleProvider:y,cloudArtifactProvider:b}=e,w=p(t);switch(t.command){case c.artifacts:return{ok:!0,data:await C(t,m(t,o.get(n)),d,b)};case`lease_allocate`:{S(w.leaseProvider,f,h);let e=d.allocateLease(a(w));return await d.runDeviceMutation(e,async()=>{let n;try{n=await y?.allocate?.(e,{...x(t),signal:u(t.meta?.requestId),deadline:Date.now()+s}),k(d,e,n)}catch(t){throw d.releaseLease(g(e)),t}if(l(t.meta?.requestId))throw await v(e,y,d);return{ok:!0,data:{lease:e,...n?{provider:n}:{}}}})}case`lease_heartbeat`:{let e=d.heartbeatLease(i(w)),n=await y?.heartbeat?.(e,x(t));return{ok:!0,data:{lease:e,...n?{provider:n}:{}}}}case`lease_release`:{let e=r(w),n=d.getLease(e),i=await d.runDeviceMutation(n,async()=>await _(d,y,n,e,x(t)));return{ok:!0,data:{released:i.registryReleased,...i.provider?{provider:i.provider}:{}}}}default:return null}}function g(e){return r({leaseId:e.leaseId,tenantId:e.tenantId,runId:e.runId,leaseBackend:e.backend,leaseProvider:e.leaseProvider,deviceKey:e.deviceKey,clientId:e.clientId})}async function _(e,t,n,r,i){let a=n?await t?.release?.(n,i):void 0;return n&&k(e,n,a),{registryReleased:e.releaseLease(r).released,provider:a}}async function v(e,n,r){let i=g(e),a,o;try{a=await _(r,n,e,i)}catch(e){o=t(e),a={registryReleased:r.releaseLease(i).released}}return y(e,a,o)}function y(e,t,r){let i=t.provider?.providerSessionId,a=Array.isArray(t.provider?.warnings)?t.provider.warnings:[],o=t.registryReleased&&r===void 0&&a.length===0;return n({leaseId:e.leaseId,leaseProvider:e.leaseProvider,released:o,registryReleased:t.registryReleased,providerSessionId:i,...a.length>0?{warnings:a}:{},...r===void 0?{}:{releaseError:r},hint:b(o,e.leaseId,i)})}function b(e,t,n){return e?`The lease request was canceled while the provider was still allocating; the session it produced was released.`:`The lease request was canceled while the provider was still allocating, and the session it produced could NOT be confirmed released — it may still be running and billing. Stop provider session ${String(n??`(unknown)`)} for lease ${t} by hand.`}function x(e){return{flags:e.flags,...typeof e.flags?.providerApp==`string`?{initialApp:e.flags.providerApp}:{},cwd:typeof e.meta?.cwd==`string`?e.meta.cwd:void 0,...e.internal?.publicNetworkOnly?{publicNetworkOnly:!0}:{}}}function S(t,n,r){if(!(!t||n===void 0||r===void 0||!r.includes(t)||n.includes(t)))throw new e(`UNSUPPORTED_OPERATION`,`Provider "${t}" is not available in this daemon runtime.`,{provider:t,hint:`Restart the daemon with ${t} configured, then retry lease allocation.`})}async function C(e,t,n,r){let i=O(e.flags,`providerSessionId`);return w(t,i)?await T(t.tenantId):await E(t,i,n,r)}function w(e,t){return o(e)||!e.leaseProvider&&!t}async function T(e){let t=await d(e);return{source:`daemon`,status:`ready`,artifacts:t,...t.length===0?{message:`No daemon artifacts available.`}:{}}}async function E(t,n,r,i){if(!t.leaseProvider)throw new e(`INVALID_ARGS`,`artifacts requires --provider for provider session lookup or an active cloud connection.`);if(!t.leaseId&&!n)throw new e(`INVALID_ARGS`,`artifacts requires an active cloud lease or --provider-session <id>.`);let a=D(r,t,n),o=await i?.listCloudArtifacts?.({provider:t.leaseProvider,leaseId:a?.leaseId??t.leaseId,providerSessionId:n});if(!o)throw new e(`UNSUPPORTED_OPERATION`,`Cloud artifacts are not available for provider "${t.leaseProvider}".`);return o}function D(t,n,r){if(!r)return;let i=t.resolveProviderSession({provider:n.leaseProvider,providerSessionId:r,tenantId:n.tenantId});if(i)return i;throw new e(`UNAUTHORIZED`,`Provider session is not owned by the request tenant`,{reason:`PROVIDER_SESSION_NOT_OWNED`})}function O(e,t){let n=e?.[t];return typeof n==`string`&&n.trim().length>0?n.trim():void 0}function k(e,t,n){let r=f(n);r&&e.recordProviderSession(t,r)}export{h as handleLeaseCommands};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{r as e}from"./rolldown-runtime.js";import{C as t}from"./sdk-contracts.js";import{c as n,n as r}from"./exec.js";import"./command.js";import{r as i}from"./version.js";import{i as a}from"./adb-host.js";import"./platform-runtime-android-adb-host.js";import"./mechanics.js";import{n as o}from"./android.js";var s=e({createLimrunRuntimeDependencies:()=>c});function c(){return{clientVersion:i(),android:{createInteractor:(e,t)=>o(e,t),createPortReverse:async e=>{let{createAndroidPortReverseManager:t}=await import(`./mechanics.js`).then(e=>e.r);return t(e)},inferAppName:async e=>{let{inferAndroidAppName:t}=await import(`./mechanics.js`).then(e=>e.r);return t(e)},listApps:async(e,t)=>{let{listAndroidAppsWithAdb:n}=await import(`./mechanics.js`).then(e=>e.r);return(await n(e,{filter:t,target:`mobile`})).map(e=>({id:e.package,name:e.name}))},getForegroundApp:async(e,t,n)=>{let{getAndroidAppStateWithAdb:r}=await import(`./platform-runtime.js`).then(e=>e.a),i=await r(async(e,r)=>await t(e,{...r,signal:n}),n);return i.package?{appId:i.package,activity:i.activity}:void 0},getKeyboardState:async e=>{let{getAndroidKeyboardStatusWithAdb:t}=await import(`./mechanics.js`).then(e=>e.r);return await t(e)},dismissKeyboard:async e=>{let{dismissAndroidKeyboardWithAdb:t}=await import(`./mechanics.js`).then(e=>e.r);return await t(e)},readLogs:async(e,t)=>{let{captureAndroidLogcatWithAdb:n}=await import(`./mechanics.js`).then(e=>e.r);return await n(e,{lines:t,timeoutMs:5e3})},adbError:async(e,t,n)=>{let{androidAdbResultError:r}=await import(`./mechanics.js`).then(e=>e.r);return r(e,t,n)}},host:{runAdb:async(e,t)=>await a(e,t),archiveDirectory:async({sourceDirectory:e,entryName:i,archivePath:a})=>{let o=[`-qr`,a,i],s=await n(`zip`,o,{cwd:e,timeoutMs:12e4});if(s.exitCode!==0)throw new t(`COMMAND_FAILED`,`Failed to package iOS .app for Limrun install`,{command:[`zip`,...o].join(` `),...r(s)})}},ios:{resolveAppAlias:async e=>{let{resolveIosAppAlias:t}=await import(`./app-resolution-facade.js`);return t(e)},readBundleAppName:async e=>{let{readIosBundleInfo:t}=await import(`./install-artifact-facade.js`);return(await t(e)).appName}}}}export{s as n,c as t};
|