agent-device 0.20.9 → 0.21.0
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.9.apk → agent-device-android-ime-helper-0.21.0.apk} +0 -0
- package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.0.apk.sha256 +1 -0
- package/android/ime-helper/dist/{agent-device-android-ime-helper-0.20.9.manifest.json → agent-device-android-ime-helper-0.21.0.manifest.json} +4 -4
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.0.apk +0 -0
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.0.apk.sha256 +1 -0
- package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.20.9.manifest.json → agent-device-android-snapshot-helper-0.21.0.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 +49 -0
- package/apple/snapshot-bridge/SnapshotBridge.m +280 -0
- package/apple/snapshot-bridge/SnapshotBridgeRuntime.h +33 -0
- package/apple/snapshot-bridge/SnapshotBridgeRuntime.m +382 -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/RunnerAlertVerification.swift +36 -0
- 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/RunnerTapPointPolicy.swift +2 -2
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+AXSnapshotFallback.swift +21 -12
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Alert.swift +21 -88
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+AlertObservation.swift +124 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandExecution.swift +110 -107
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandJournal.swift +6 -14
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Interaction.swift +85 -114
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Lifecycle.swift +13 -6
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Models.swift +72 -175
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Navigation.swift +10 -11
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+PrivateAXElementTypes.swift +12 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+PrivateAXPresentation.swift +78 -64
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+ScreenRecorder.swift +17 -9
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+ScrollGesture.swift +47 -13
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Snapshot.swift +232 -438
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotBackendCapabilities.swift +98 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotCapturePlan.swift +229 -168
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotPresentationInvariant.swift +19 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotTiming.swift +110 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedCommitDeadline.swift +206 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedTextEntry.swift +147 -25
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SystemModal.swift +21 -18
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntry.swift +24 -307
- 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 +19 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextTyping.swift +49 -16
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Transport.swift +2 -11
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TvRemote.swift +4 -19
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests.swift +16 -20
- package/dist/apple/runner/AgentDeviceRunner/RecordingScripts/RecordingExportSupport.swift +111 -0
- package/dist/apple/runner/AgentDeviceRunner/RecordingScripts/recording-overlay.swift +42 -81
- package/dist/apple/runner/AgentDeviceRunner/RecordingScripts/recording-trim.swift +35 -82
- 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 +61 -0
- package/dist/src/ai-sdk.js +1 -0
- 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/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/back-mode.js +1 -0
- 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 +77 -51
- package/dist/src/cli-output.js +1 -1
- package/dist/src/cli-runner.js +1 -1
- package/dist/src/cli.js +5 -7
- 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 +1606 -0
- 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 -0
- package/dist/src/command.js +1 -0
- package/dist/src/{selector-vocabulary.js → compatibility-policy.js} +1 -1
- 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/format.js +2 -0
- 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 +2 -1578
- 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/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 +1618 -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 -0
- 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/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-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-apple-resources.js +1 -0
- 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 -15
- 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 +39 -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 -8
- 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-selector-query.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 +4 -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 +222 -99
- 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 +539 -199
- 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 +10 -3
- package/dist/src/session-allocation.js +1 -0
- package/dist/src/session-artifact-paths.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 -28
- 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 -0
- 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 -0
- 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 -0
- package/dist/src/toolchain-probe.js +2 -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/linux/atspi-dump.py +54 -9
- package/package.json +73 -38
- package/server.json +9 -3
- package/android/ime-helper/dist/agent-device-android-ime-helper-0.20.9.apk.sha256 +0 -1
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.20.9.apk +0 -0
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.20.9.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 -75
- 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+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/cancel.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/screenshot-geometry.js +0 -1
- 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{O 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{y 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{b as e,y 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(e,n,r,a){await e.toolchains.prepare(`android`);let o=[...n.sdkRoots,i.join(e.homeDirectory,`Android`,`Sdk`)],s=await _(e,`adb`,o,[`platform-tools`,`adb`]);if(!s)throw new t(`TOOL_MISSING`,`adb not found in PATH`);let c={host:e,adb:s,emulator:await _(e,`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(t,n,r){try{return await E(t,n,r)}catch(t){let n=e(t);if(n.code===`COMMAND_FAILED`&&typeof n.details?.timeoutMs==`number`)return;throw t}}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{y 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{y 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{y 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{l as e,y 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(t,n,r={}){let i=de(t,n,r),a=t.stage===`presented`?t.validation.presentationKey:o(n),s=t.stage===`acquired`?t.acquisition.truncated:t.presentation.payload.truncated;return{payload:{nodes:e(i.nodes),...s===void 0?{}:{truncated:s}},presentationKey:a,comparisonIdentity:c(t,n),residue:t.stage===`acquired`?[...t.acquisition.residue]:[...t.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(e){if(!(e instanceof u))throw e;let n=p(e),r=e.reason===`missing-viewport`||e.reason===`invalid-viewport`?`Use snapshot --raw to inspect the acquired iOS tree; regular presentation requires valid viewport evidence.`:void 0;throw new t(`COMMAND_FAILED`,e.message,{...n,...r?{hint:r}:{}},e)}export{ge as presentIosSnapshotAcquisition};
|
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??h(t.flags,`tenant`),runId:t.meta?.runId??h(t.flags,`runId`),leaseId:t.meta?.leaseId??h(t.flags,`leaseId`),leaseTtlMs:t.meta?.leaseTtlMs,leaseBackend:t.meta?.leaseBackend,leaseProvider:t.meta?.leaseProvider??h(t.flags,`leaseProvider`)??h(t.flags,`provider`),deviceKey:t.meta?.deviceKey??h(t.flags,`deviceKey`),clientId:t.meta?.clientId??h(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 m(e)}function l(e){let{ttlMs:t,...n}=m(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})}}}function d(t){let n=e({leaseProvider:t.leaseProvider,deviceKey:t.deviceKey,clientId:t.clientId});return Object.keys(n).length>0?n:void 0}function f(e){return e.leaseProvider===`proxy`}function p(e){return f(e)?n.filter(t=>!e[t]):[]}function m(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 h(e,t){let n=e?.[t];return typeof n==`string`?n:void 0}export{r as a,d as c,l as d,a as f,i,c as l,p as n,s as o,f as r,o as s,t,u};
|
package/dist/src/lease.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{C as e,x as t,y 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(t,n,r){let i=g(t),a,o;try{a=await _(r,n,t,i)}catch(t){o=e(t),a={registryReleased:r.releaseLease(i).released}}return y(t,a,o)}function y(e,n,r){let i=n.provider?.providerSessionId,a=Array.isArray(n.provider?.warnings)?n.provider.warnings:[],o=n.registryReleased&&r===void 0&&a.length===0;return t({leaseId:e.leaseId,leaseProvider:e.leaseProvider,released:o,registryReleased:n.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(e,t,r){if(!(!e||t===void 0||r===void 0||!r.includes(e)||t.includes(e)))throw new n(`UNSUPPORTED_OPERATION`,`Provider "${e}" is not available in this daemon runtime.`,{provider:e,hint:`Restart the daemon with ${e} 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(e,t,r,i){if(!e.leaseProvider)throw new n(`INVALID_ARGS`,`artifacts requires --provider for provider session lookup or an active cloud connection.`);if(!e.leaseId&&!t)throw new n(`INVALID_ARGS`,`artifacts requires an active cloud lease or --provider-session <id>.`);let a=D(r,e,t),o=await i?.listCloudArtifacts?.({provider:e.leaseProvider,leaseId:a?.leaseId??e.leaseId,providerSessionId:t});if(!o)throw new n(`UNSUPPORTED_OPERATION`,`Cloud artifacts are not available for provider "${e.leaseProvider}".`);return o}function D(e,t,r){if(!r)return;let i=e.resolveProviderSession({provider:t.leaseProvider,providerSessionId:r,tenantId:t.tenantId});if(i)return i;throw new n(`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{y as t}from"./sdk-contracts.js";import{n,s 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 r(`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(` `),...n(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};
|