agent-device 0.21.22 → 0.21.24
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 +6 -6
- package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.22.apk → agent-device-android-ime-helper-0.21.24.apk} +0 -0
- package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.24.apk.sha256 +1 -0
- package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.22.manifest.json → agent-device-android-ime-helper-0.21.24.manifest.json} +4 -4
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.24.apk +0 -0
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.24.apk.sha256 +1 -0
- package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.21.22.manifest.json → agent-device-android-snapshot-helper-0.21.24.manifest.json} +6 -6
- package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/SnapshotTraversal.swift +12 -6
- package/apple/macos-helper/Tests/AgentDeviceMacOSHelperTests/RectResponseTests.swift +21 -0
- package/apple/snapshot-bridge/README.md +9 -7
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandDispatch.swift +56 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandExecution.swift +14 -5
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Lifecycle.swift +8 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Models.swift +12 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotCaptureTarget.swift +1 -1
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotExecution.swift +29 -5
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntry.swift +34 -10
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryFocus.swift +19 -5
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextTyping.swift +3 -3
- package/dist/src/adapter.js +1 -1
- package/dist/src/adb.js +1 -1
- package/dist/src/agent-browser-lifecycle.js +1 -1
- package/dist/src/agent-browser-process-record.js +1 -1
- package/dist/src/agent-browser-provider.js +1 -1
- package/dist/src/agent-device-client.js +2 -2
- package/dist/src/alert-runtime.js +1 -1
- package/dist/src/alert.js +1 -1
- package/dist/src/android-adb.d.ts +3 -2
- package/dist/src/android-input-ownership.js +1 -1
- package/dist/src/app-backend.js +1 -1
- package/dist/src/app-inventory.d.ts +4 -0
- package/dist/src/app-launch.js +1 -1
- package/dist/src/app-lifecycle.js +1 -1
- package/dist/src/app-log-reconnect.js +1 -1
- package/dist/src/app-log-runtime2.js +3 -3
- package/dist/src/app-resolution.js +2 -2
- package/dist/src/app-state-runtime.d.ts +15 -0
- package/dist/src/apple-runner-platform.js +1 -1
- package/dist/src/application-lifecycle-interaction.js +1 -1
- package/dist/src/aws-device-farm-connection.js +1 -0
- package/dist/src/back-mode.js +1 -1
- package/dist/src/backend-snapshot-options.js +1 -1
- package/dist/src/browserstack-connection.js +1 -0
- package/dist/src/browserstack-device-features.js +1 -0
- package/dist/src/browserstack.js +1 -0
- package/dist/src/cache.js +1 -1
- package/dist/src/cli-config.js +1 -1
- package/dist/src/cli-help.js +35 -19
- package/dist/src/cli-runner.js +1 -1
- package/dist/src/cli.js +3 -4
- package/dist/src/client-companion-tunnel.js +1 -0
- package/dist/src/client-metro-companion.js +1 -1
- package/dist/src/client-metro.js +1 -1
- package/dist/src/client-options.js +3 -3
- package/dist/src/client-types.d.ts +7 -5
- package/dist/src/cloud-artifacts.d.ts +9 -2
- package/dist/src/code-signature-cache.js +1 -1
- package/dist/src/command-metadata.js +1 -1
- package/dist/src/command-schema.js +1 -1
- package/dist/src/command-tools.js +2 -2
- package/dist/src/connection-runtime.js +1 -1
- package/dist/src/connection-verification.js +1 -0
- package/dist/src/connection.js +5 -5
- package/dist/src/contracts.d.ts +1 -1
- package/dist/src/daemon-client-lease-beat.js +1 -1
- package/dist/src/daemon-client-lifecycle.js +1 -1
- package/dist/src/daemon-client-transport.js +1 -1
- package/dist/src/daemon-http.js +1 -1
- package/dist/src/daemon-policy-file.js +1 -1
- package/dist/src/daemon-registration-owner.js +1 -1
- package/dist/src/device-claim-inspection.js +1 -1
- package/dist/src/device-input-state.d.ts +2 -15
- package/dist/src/device-readiness-runtime.js +1 -1
- package/dist/src/device-selection-resolver.js +1 -1
- package/dist/src/device-session.js +3 -1
- package/dist/src/device.js +1 -1
- package/dist/src/device2.js +1 -1
- package/dist/src/device3.js +1 -1
- package/dist/src/dispatch-resolve.js +3 -3
- package/dist/src/doctor-facade.js +1 -1
- package/dist/src/durable-capture-resource.js +1 -1
- package/dist/src/durable-resource.js +1 -1
- package/dist/src/exec.js +1 -1
- package/dist/src/file.js +1 -1
- package/dist/src/find.js +1 -1
- package/dist/src/finders.js +1 -1
- package/dist/src/format.js +2 -1
- package/dist/src/gesture-admission.js +1 -1
- package/dist/src/gesture-plan-types.d.ts +2 -5
- package/dist/src/gesture-runtime.js +1 -1
- package/dist/src/helper.js +2 -2
- package/dist/src/human-control.js +1 -1
- package/dist/src/ime-rebind.js +1 -0
- package/dist/src/ime-settings-record.js +1 -0
- package/dist/src/ime-state.js +1 -0
- package/dist/src/index.d.ts +3 -3
- package/dist/src/input-actions.js +1 -1
- package/dist/src/input-actions2.js +1 -1
- package/dist/src/install-source2.js +1 -1
- package/dist/src/instance-client.js +1 -1
- package/dist/src/interaction-positionals.js +1 -1
- package/dist/src/interaction-ref-policy.js +1 -1
- package/dist/src/interaction.js +1 -1
- package/dist/src/interaction2.js +1 -1
- package/dist/src/interactor.js +5 -5
- package/dist/src/interactors.js +1 -1
- package/dist/src/internal/bin.js +1 -1
- package/dist/src/internal/daemon.js +1 -1
- package/dist/src/inventory2.js +1 -1
- package/dist/src/ios-client.js +4 -4
- package/dist/src/ios-snapshot-acquisition.js +1 -1
- package/dist/src/ios-snapshot-engine.js +1 -1
- package/dist/src/ios-snapshot-runtime.js +1 -1
- package/dist/src/launch-confirmation.js +1 -1
- package/dist/src/lease-scope.js +1 -1
- package/dist/src/lease.js +1 -1
- package/dist/src/limrun.d.ts +4 -555
- package/dist/src/load.js +1 -1
- package/dist/src/local-interactor-operation-set.js +1 -1
- package/dist/src/log-stream.js +33 -0
- package/dist/src/managed-device-scope.js +1 -1
- package/dist/src/manifest.js +1 -0
- package/dist/src/mechanics.js +16 -16
- package/dist/src/mobile-snapshot-semantics.js +1 -1
- package/dist/src/node-http.js +1 -0
- package/dist/src/observation.js +1 -2
- package/dist/src/overlay.js +3 -3
- package/dist/src/owner-identity.js +3 -3
- package/dist/src/perf-facade.js +1 -1
- package/dist/src/perf-runtime-plan.js +1 -1
- package/dist/src/perf-target.js +1 -1
- package/dist/src/physical-device-control.js +1 -1
- package/dist/src/platform-request-scope.js +1 -1
- package/dist/src/platform-runtime-app-log-process.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 +1 -1
- package/dist/src/platform-runtime-screen-recording-finalizer-host.js +1 -1
- package/dist/src/platform-runtime-screen-recording-process-host.js +1 -1
- package/dist/src/platform-runtime-unavailable.js +1 -1
- package/dist/src/platform-runtime.js +1 -1
- package/dist/src/platform-runtime2.js +1 -1
- package/dist/src/plugin.js +1 -0
- package/dist/src/plugins/webdriver.d.ts +111 -0
- package/dist/src/plugins/webdriver.js +1 -0
- package/dist/src/plugins.d.ts +2 -1
- package/dist/src/plugins2.js +1 -1
- package/dist/src/process-exit.js +1 -1
- package/dist/src/process.js +1 -1
- package/dist/src/provider-credential-fingerprint.js +1 -1
- package/dist/src/provider-device-admission.js +1 -1
- package/dist/src/provider-device-runtime.d.ts +556 -0
- package/dist/src/provider-policy.js +1 -0
- package/dist/src/provider-profile-fields.js +1 -1
- package/dist/src/provider-webdriver.js +1 -2
- package/dist/src/providers.js +1 -1
- package/dist/src/proxy.js +2 -2
- package/dist/src/react-devtools.js +2 -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/recording.js +1 -1
- package/dist/src/registry.js +24 -24
- package/dist/src/remote-bridge.js +1 -0
- package/dist/src/remote-config-core.js +1 -0
- package/dist/src/remote-config.js +1 -1
- package/dist/src/remote-config2.js +1 -1
- package/dist/src/remote-connection-state.js +1 -0
- package/dist/src/replay.js +2 -2
- package/dist/src/request-admission.js +1 -1
- package/dist/src/request-runtime-binding.js +1 -1
- package/dist/src/result-serialization.js +1 -1
- package/dist/src/retry.js +1 -1
- package/dist/src/retry2.js +1 -0
- package/dist/src/runner-artifact-manifest.js +1 -1
- package/dist/src/runner-cache-metadata.js +2 -3
- package/dist/src/runner-cache-retention.js +1 -0
- package/dist/src/runner-cache-trim.js +1 -0
- package/dist/src/runner-client.js +1 -1
- package/dist/src/runner-dev-tools-security.js +1 -1
- package/dist/src/runner-device-readiness.js +1 -1
- package/dist/src/runner-device-set.js +1 -0
- package/dist/src/runner-disposal.js +1 -1
- package/dist/src/runner-error-classification.js +1 -1
- package/dist/src/runner-exchange.js +1 -1
- package/dist/src/runner-lease.js +1 -0
- package/dist/src/runner-operations-facade.js +1 -1
- package/dist/src/runner-session-types.js +1 -1
- package/dist/src/runner-start-budget.js +1 -1
- package/dist/src/runner-toolchain-probe.js +2 -0
- package/dist/src/runner.js +1 -1
- package/dist/src/runtime-deployment.js +1 -0
- package/dist/src/runtime.js +1 -1
- package/dist/src/runtime10.js +1 -2
- package/dist/src/runtime11.js +2 -0
- package/dist/src/runtime2.js +2 -5
- package/dist/src/runtime3.js +5 -1
- package/dist/src/runtime4.js +1 -5
- package/dist/src/runtime5.js +5 -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/screen-recording-transport.js +1 -1
- package/dist/src/screenshot-density.js +1 -1
- package/dist/src/screenshot-overlay-draw.js +1 -1
- package/dist/src/screenshot3.js +2 -2
- package/dist/src/script.js +1 -1
- package/dist/src/scroll-gesture.js +1 -1
- package/dist/src/sdk-batch.js +2 -2
- package/dist/src/sdk-contracts.d.ts +25 -33
- 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-remote-config.d.ts +4 -0
- package/dist/src/sdk-remote-config.js +1 -1
- package/dist/src/sdk-selectors.d.ts +1 -1
- package/dist/src/sdk-selectors.js +1 -1
- package/dist/src/selection.js +0 -0
- package/dist/src/selector-pipeline-policy.js +1 -1
- package/dist/src/selector-runtime.js +1 -1
- package/dist/src/selectors.js +1 -1
- package/dist/src/server.js +2 -2
- package/dist/src/session-snapshot.js +1 -1
- package/dist/src/session2.js +5 -5
- package/dist/src/simctl.js +1 -1
- package/dist/src/simulator-boot.js +1 -1
- package/dist/src/simulator-state.js +1 -1
- package/dist/src/simulator.js +1 -1
- package/dist/src/snapshot-capture-annotations.js +1 -1
- package/dist/src/snapshot-desktop-projection.js +1 -1
- package/dist/src/snapshot-private-evidence.js +1 -0
- package/dist/src/snapshot-runtime-binding.js +1 -1
- package/dist/src/snapshot-runtime.js +1 -1
- package/dist/src/snapshot-state.js +1 -1
- package/dist/src/snapshot4.js +1 -1
- package/dist/src/src2.js +1 -1
- package/dist/src/src3.js +1 -1
- package/dist/src/src4.js +1 -1
- package/dist/src/src5.js +1 -1
- package/dist/src/src6.js +1 -1
- package/dist/src/src7.js +1 -1
- package/dist/src/src8.js +20 -20
- package/dist/src/store.js +1 -1
- package/dist/src/target-evidence.js +1 -1
- package/dist/src/text-entry-focus.js +1 -1
- package/dist/src/tool-provider2.js +1 -1
- package/dist/src/touch-runtime2.js +1 -1
- package/dist/src/tree.js +1 -1
- package/dist/src/type-text-runtime.js +1 -1
- package/dist/src/video.js +1 -1
- package/package.json +24 -16
- package/server.json +2 -2
- package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.22.apk.sha256 +0 -1
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.22.apk +0 -0
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.22.apk.sha256 +0 -1
- package/dist/src/capabilities.js +0 -1
- package/dist/src/compatibility-policy.js +0 -1
- package/dist/src/daemon-artifacts.js +0 -1
- package/dist/src/device-claim-rule.js +0 -1
- package/dist/src/human-control-contract.js +0 -1
- package/dist/src/prepare-kind.js +0 -1
- package/dist/src/provider-device-runtimes.js +0 -1
- package/dist/src/screen-recording-admission-ledger.js +0 -1
- package/dist/src/screenshot-runtime.js +0 -1
- package/dist/src/session-routing.js +0 -1
- package/dist/src/session-runtime-admission.js +0 -1
- package/dist/src/session-stream.js +0 -27
- package/dist/src/timeouts.js +0 -1
- package/dist/src/touch-reference-frame.js +0 -1
- package/dist/src/vars.js +0 -2
- package/dist/src/viewport.js +0 -1
package/dist/src/interactor.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{$ as e,P as t,T as n,tt as r,w as i}from"./sdk-contracts.js";import{i as a}from"./capture.js";import{
|
|
1
|
+
import{$ as e,P as t,T as n,tt as r,w as i}from"./sdk-contracts.js";import{i as a}from"./capture.js";import{r as o}from"./snapshot-capture-annotations.js";import{O as s,v as c}from"./sdk-batch-runner.js";import{c as l,r as u}from"./diagnostics.js";import"./diagnostics2.js";import{A as ee,g as d,h as te,j as ne,m as re,x as f}from"./sdk-device.js";import{Wr as ie,ni as ae}from"./sdk-batch.js";import{d as oe,i as se,l as ce}from"./scroll-gesture.js";import{n as p}from"./session.js";import{S as le,T as ue,b as m,m as de,n as fe,r as pe,v as me,x as he}from"./settings.js";import{c as ge,n as _e,t as ve}from"./scroll-command.js";import"./device.js";import{t as ye}from"./device-rotation.js";import{o as h}from"./exec.js";import{r as be,t as xe}from"./retry.js";import{a as Se}from"./tv-remote.js";import"./command.js";import"./retry2.js";import{a as Ce}from"./gesture-plan.js";import{n as we}from"./scoped-provider.js";import{n as Te,r as Ee}from"./ios-snapshot-planning.js";import{n as De,r as Oe}from"./ios-system-surface.js";import{a as ke,l as Ae,n as je,s as Me}from"./quality-warnings.js";import{r as Ne}from"./ios-snapshot-acquisition.js";import{t as Pe}from"./png-size.js";import{n as Fe}from"./screenshot-density.js";import{i as g,n as Ie,r as _}from"./ios-snapshot-engine.js";import{C as Le,g as Re,o as ze,r as v}from"./host-file.js";import{c as y,f as Be,h as Ve,m as He,p as Ue}from"./config.js";import{o as We}from"./tool-provider.js";import{n as Ge,r as b,t as x}from"./physical-device-control.js";import{i as Ke,n as S,r as C,s as qe}from"./runner.js";import{u as Je}from"./host.js";import{t as Ye}from"./runner-cache-metadata.js";import{n as w,o as T,r as Xe}from"./simctl.js";import{c as E}from"./runner-client.js";import"./runner-error-classification.js";import{n as Ze,r as Qe,t as $e}from"./app-launch.js";import{r as D,t as O}from"./simulator.js";import{c as et,d as tt,l as nt,o as rt,s as it,t as at,u as ot}from"./helper.js";import{a as st,d as ct,f as lt,p as ut}from"./app-resolution.js";import{i as dt,t as ft}from"./display-inventory.js";import{t as pt}from"./simctl-settings.js";import{n as mt}from"./interactor-types.js";import{r as ht,t as gt}from"./app-backend.js";import{i as _t,r as vt,t as yt}from"./alert.js";import{t as bt}from"./surface-snapshot.js";import{t as xt}from"./ios-target-activation.js";import k from"node:path";async function St(e){return d(e)?await ct():(D(e,`clipboard`),await O(e),h(await T(e,[`pbpaste`,e.id],{allowFailure:!0}),`Failed to read iOS simulator clipboard`).stdout.replaceAll(`\r
|
|
2
2
|
`,`
|
|
3
|
-
`).replace(/\n$/,``))}async function
|
|
4
|
-
`).map(e=>e.trim()).filter(e=>e.length>0&&e!==`Current Status Bar Overrides:`&&!/^=+$/.test(e));for(let e of r){let r=/^DataNetworkType:\s+(\d+)$/.exec(e);if(r){let e=Number(r[1]),i=
|
|
5
|
-
`).map(e=>e.trim().split(/\s+/)).find(e=>e[0]===R)?.[1];return{args:t,stderr:n.stderr,stdout:n.stdout,exitCode:n.exitCode,state:n.exitCode===0?r:void 0}}function
|
|
6
|
-
`?void 0:`append`,appBundleId:t.appBundleId},n)),fill:async(r,i,a,o,s)=>await k(e,{command:`type`,x:r,y:i,text:a,delayMs:o,textEntryMode:`replace`,...s?.allowNonHittableCoordinateFallback?{allowNonHittableCoordinateFallback:!0}:{},appBundleId:t.appBundleId},n),scroll:async(r,i)=>await On(k,e,t,n,r,i),performGesture:async r=>await En(e,t,n,r),gestureViewport:async()=>Tn(await k(e,{command:`gestureViewport`,appBundleId:t.appBundleId},n))}}}async function vn(e,t,n,r,i){let a=d(e)?p(i.surface,`xctest`):void 0;return a?await yn(t,r,i,a):i.button===`primary`?i.count===1?await xn(e,t,n,r,i):await Ve(e,r,i,t.appBundleId,async t=>await k(e,t,n)):await bn(e,t,n,r,i.button)}async function yn(e,n,r,i){if(r.button!==`primary`)throw new t(`UNSUPPORTED_OPERATION`,`${r.button} click is not supported on macOS ${i} sessions.`);let{runMacOsPressAction:a}=await import(`./helper.js`).then(e=>e.n),o=await a(n.x,n.y,{bundleId:e.appBundleId,surface:i,holdMs:r.holdMs,clicks:r.count,doubleClick:r.doubleTap,intervalMs:r.intervalMs,signal:e.signal});return o.holdMs===void 0?{}:{holdMs:o.holdMs}}async function bn(e,t,n,r,i){return await k(e,{command:`mouseClick`,x:r.x,y:r.y,button:i,appBundleId:t.appBundleId},n)}async function xn(e,t,n,r,i){if(i.doubleTap){let i=await k(e,T([{kind:`doubleTap`,x:r.x,y:r.y}],t.appBundleId),n);return E(i),i}return i.holdMs>0?await k(e,{command:`longPress`,x:r.x,y:r.y,durationMs:i.holdMs,appBundleId:t.appBundleId},n):await k(e,q(e,t,r.x,r.y),n)}function Sn(e){let t=e.textEntryRoute;return wn(t)?{textEntryRoute:t}:{}}function Cn(e){let t=e.applicationState;return i(t)?{applicationState:t}:{}}function wn(e){return typeof e==`string`&&st.includes(e)}function Tn(e){let n=K(e.x),r=K(e.y),i=K(e.x2),a=K(e.y2);if(n===void 0||r===void 0||i===void 0||a===void 0||i<=0||a<=0)throw new t(`COMMAND_FAILED`,`Apple runner returned an invalid gesture viewport`);return{x:n,y:r,width:i,height:a}}function K(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}async function En(e,t,n,r){if(r.topology===`two`&&ct(e,r.intent),r.topology===`single`&&d(e)){let{start:i,end:a}=h(r);return await k(e,{command:`drag`,x:i.x,y:i.y,x2:a.x,y2:a.y,durationMs:r.durationMs,appBundleId:t.appBundleId},n)}if(r.topology===`single`&&f(e)){let{start:i,end:a}=h(r);return await k(e,{command:`swipe`,direction:Dn(i,a),appBundleId:t.appBundleId},n)}return await k(e,{command:`gesture`,gesturePlan:r,appBundleId:t.appBundleId},n)}function Dn(e,t){let n=t.x-e.x,r=t.y-e.y;return Math.abs(n)>=Math.abs(r)?n>=0?`right`:`left`:r>=0?`down`:`up`}function q(e,t,n,r){return{command:`tap`,x:n,y:r,...u(e)?{synthesized:!0}:{},appBundleId:t.appBundleId}}async function On(e,t,n,r,i,a){if(he(a?.durationMs,{invalidMessage:`scroll durationMs must be a non-negative integer at most ${ge}`}),f(t))return W(await e(t,G(i,n.appBundleId,a?.durationMs),r),{amount:a?.amount,durationMs:a?.durationMs});if(oe(a??{}),d(t))return await hn(e,t,n,r,i,a);let o=dn(a),s;try{s=await e(t,{command:`scroll`,direction:i,...fn(o),appBundleId:n.appBundleId},r)}catch(e){throw un(e)}return H(s,i,o)}const kn=p(`app`,`native`),An=`The native macOS app backend acts through accessibility actions only. Unset AGENT_DEVICE_MACOS_APP_BACKEND to drive this app with XCTest.`,jn=new Set(Qe);function Mn(e,t){let n=()=>{if(t.appBundleId)return t.appBundleId;throw J(`an action on a session that names no app`)},r=async(e,r={})=>Nn(await Y(qe(e.x,e.y,{surface:kn,bundleId:n(),clicks:r.count,intervalMs:r.intervalMs,signal:t.signal})));return{open:e.open,openDevice:e.openDevice,close:e.close,screenshot:e.screenshot,snapshot:e.snapshot,readTextAtPoint:e.readTextAtPoint,readClipboard:e.readClipboard,writeClipboard:e.writeClipboard,setSetting:e.setSetting,readAlert:e.readAlert,awaitAlert:e.awaitAlert,acceptAlert:e.acceptAlert,dismissAlert:e.dismissAlert,tap:async(e,t)=>await r({x:e,y:t}),pressPoint:async(t,n)=>{if(n.surface!==void 0&&n.surface!==`app`)return await e.pressPoint(t,n);if(n.button!==`primary`)throw J(`${n.button} click`);if(n.doubleTap)throw J(`double-click`);if(n.holdMs>0)throw J(`press and hold`);return await r(t,n)},longPress:async()=>{throw J(`press and hold`)},focus:async(e,t)=>await r({x:e,y:t}),type:async(e,r)=>{await Y(Je(e,{bundleId:n(),delayMs:r,signal:t.signal}))},fill:async(e,r,i)=>Nn(await Y(Xe(e,r,i,{bundleId:n(),signal:t.signal}))),scroll:async(e,r)=>{oe(r??{});let i=await Y($e(e,{bundleId:n(),amount:r?.amount,pixels:r?.pixels,signal:t.signal}));return{...H(i,e,r,{includeDuration:!1}),mechanism:i.mechanism}},back:async()=>{throw J(`back`)},setOrientation:async()=>{throw J(`orientation`)}}}function Nn(e){return{mechanism:e.mechanism,...e.windowTitle===void 0?{}:{windowTitle:e.windowTitle}}}function J(e){return new t(`UNSUPPORTED_OPERATION`,`${e} is not supported by the native macOS app backend.`,{reason:`unsupported-device-backend`,hint:An})}async function Y(e){try{return await e}catch(e){if(!(e instanceof t))throw e;let n=e.details?.reason;throw typeof n!=`string`||!jn.has(n)?e:new t(`UNSUPPORTED_OPERATION`,e.message,{...e.details,reason:`unsupported-device-backend`,helperReason:n,hint:An},e)}}const Pn={0:`unknown`,1:`notRunning`,2:`runningBackgroundSuspended`,3:`runningBackground`};function Fn(e,t){if(typeof e!=`object`||!e||Array.isArray(e))return;let r={...e},i=r.reason;if(!n(i))return;let a=r.priorState;if(typeof a!=`number`||!Number.isInteger(a))return;let o=Pn[a];o===void 0&&t?.({reason:i,rawPriorState:a});let s=r.otherActiveApplicationPid;return{reason:i,priorState:o??`unknown`,...typeof s==`number`&&Number.isInteger(s)&&s>0?{otherActiveApplicationPid:s}:{}}}function In(e){let t=Ln(e.systemSurface),n=o(e.keyboard),r=Fn(e.targetActivation,e=>Ue({level:`debug`,phase:`ios_runner_target_activation_prior_state_unmapped`,data:e}));return{nodes:Array.isArray(e.nodes)?e.nodes:void 0,truncated:typeof e.truncated==`boolean`?e.truncated:void 0,quality:Oe(e.snapshotQuality),qualityPayload:Vn(e.qualityPayload,t),runnerFatal:e.runnerFatal===!0,...n?{keyboard:n}:{},...t?{systemSurface:t}:{},...r?{targetActivation:r}:{},message:typeof e.message==`string`&&e.message.trim().length>0?e.message:void 0}}function Ln(e){if(!X(e)||typeof e.bundleId!=`string`)return;let t=Ee(e.bundleId);return t&&{bundleId:t.bundleId,kind:t.kind}}function Rn(e,t,n){let r=n.nodes??[],i=Hn(r,n.qualityPayload?.nodes);if(n.runnerFatal===!0||r.length===0&&n.qualityPayload===void 0)return{nodes:r};let a=we({raw:t?.raw,interactiveOnly:t?.interactiveOnly,depth:t?.depth,scope:t?.scope,customActions:t?.customActions}),o={stage:`presented`,presentation:{producer:`apple-runner`,intent:`full`,payload:{nodes:r,truncated:n.truncated??!1,...n.quality?.effectiveDepth===void 0?{}:{effectiveDepth:n.quality.effectiveDepth}},...n.qualityPayload?{qualityPayload:n.qualityPayload}:{}},validation:{presentationKey:Ce(a),viewport:i,hittability:{kind:`available`},lineage:{targetId:e},residue:[]}};try{let e=Ne(o,a),t=re(e.validatedViewport);return{nodes:e.nodes,...t?{viewport:t}:{}}}catch(e){zn(e,n)}}function zn(e,n){let r=n.quality;if(e instanceof v&&Ae(r))throw new t(`COMMAND_FAILED`,e.message,{..._(e),...n.systemSurface?{systemSurface:n.systemSurface}:{},snapshotQuality:{state:r.state,backend:r.backend,...r.reason?{reason:r.reason}:{},...r.reasonCode?{reasonCode:r.reasonCode}:{}},hint:Bn(n.systemSurface,r)},e);Z(e,n.systemSurface)}function Bn(e,t){return[e?`${e.bundleId} hosts the surface presented over the app, and this capture targeted that surface.`:void 0,...ke(t,[])].filter(e=>e!==void 0).join(` `)}function Vn(e,t){if(e!==void 0)return(!X(e)||!Array.isArray(e.nodes)||typeof e.truncated!=`boolean`)&&Z(new v(`invalid-quality-payload`,`iOS runner returned an invalid quality payload`),t),e.scope!==void 0&&e.scope!==null&&Z(new v(`invalid-quality-payload`,`iOS runner quality payload must be unscoped`,{field:`scope`}),t),{nodes:e.nodes,truncated:e.truncated,scope:null}}function Hn(e,t){return g(Un(t),{fallbackToLargestRoot:!0})??g(Un(e),{fallbackToLargestRoot:!0})??{kind:`missing`,reason:`not-provided`}}function Un(e){return e?.filter(e=>e.parentIndex===void 0)??[]}function X(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Z(e,n){throw e instanceof v?new t(`COMMAND_FAILED`,e.message,{..._(e),...n?{systemSurface:n}:{}},e):e}function Wn(e,n,r){if(e.appleOs===`watchos`)throw new t(`UNSUPPORTED_PLATFORM`,`watchOS is not supported: XCUITest cannot drive watchOS UI, so this device has no runner backend.`);let{overrides:i,runnerOpts:a}=_n(e,n),o=d(e)?lt():`xctest`,s=t=>d(e)?p(t,o):void 0,c={open:(t,n)=>Ge(e,t,{appBundleId:n?.appBundleId,launchConsole:n?.launchConsole,launchArgs:n?.launchArgs,terminateRunningApp:n?.terminateRunningApp,url:n?.url,runnerOptions:a}),openDevice:()=>Ke(e),close:t=>A(e,t,a),screenshot:(t,n)=>tr(e,t,n,a,s(n?.surface)),snapshot:async t=>await Gn(e,t,a,s(t?.surface)),readTextAtPoint:async(t,n)=>{let r=s(n?.surface);return r?await nr(t,r,n?.appBundleId,n?.signal):await rr(e,t,n,a)},findText:async(t,n)=>({found:(await k(e,{command:`findText`,text:t,appBundleId:n?.appBundleId},n?.signal?{...a,signal:n.signal}:a))?.found===!0}),back:async t=>{if(f(e)){await k(e,G(`menu`,n.appBundleId),a);return}await k(e,{command:gn(t),appBundleId:n.appBundleId},a)},home:async()=>{if(f(e)){await k(e,G(`home`,n.appBundleId),a);return}await k(e,{command:`home`,appBundleId:n.appBundleId},a)},setOrientation:async r=>{let i=$n(await k(e,{command:`rotate`,orientation:r,appBundleId:n.appBundleId},a));if(i!==r)throw new t(`COMMAND_FAILED`,`iOS runner observed ${i} after requesting ${r}`,{requestedOrientation:r,observedOrientation:i});return{orientation:i}},appSwitcher:async()=>{await k(e,{command:`appSwitcher`,appBundleId:n.appBundleId},a)},actionButton:async()=>{await k(e,{command:`actionButton`,appBundleId:n.appBundleId},a)},tvRemote:async(t,r)=>{await k(e,G(ye(t),n.appBundleId,r),a)},keyboardDismiss:async()=>{let t=await k(e,{command:`keyboardDismiss`,appBundleId:n.appBundleId},a);return{kind:`mechanism`,wasVisible:Q(t,`wasVisible`),dismissed:Q(t,`dismissed`),visible:Q(t,`visible`),mechanism:Qn(t,`keyboardDismissMechanism`)}},keyboardEnter:async()=>{let t=await k(e,{command:`keyboardReturn`,appBundleId:n.appBundleId},a);return{kind:`visibility-echo`,visible:Q(t,`visible`),wasVisible:Q(t,`wasVisible`)}},readClipboard:()=>ht(e),writeClipboard:t=>gt(e,t,a),setSetting:(t,n,r,i)=>Pt(e,t,n,r,i),readSetting:t=>It(e,t),readAlert:t=>ut(e,a,t),awaitAlert:t=>dt(e,a,t),acceptAlert:t=>ft(e,a,`accept`,t),dismissAlert:t=>ft(e,a,`dismiss`,t),...i},l=o===`native`?Mn(c,n):c;return r?er(e,n,l,r):l}async function Gn(e,t,n,r){return r?await pt({...t,surface:r},t?.signal):await Kn(e,t,n)}async function Kn(e,t,n){let r=In(await s(`snapshot_capture`,async()=>await k(e,{command:`snapshot`,appBundleId:t?.appBundleId,interactiveOnly:t?.interactiveOnly,preferredBackend:t?.preferredBackend,customActions:t?.customActions,depth:t?.depth,scope:t?.scope,raw:t?.raw},Zn(n,t?.signal)),{backend:`xctest`}));qn(e,t,r);let i=Jn(r),a=Yn(e,t,r);return{nodes:a.nodes,truncated:r.truncated??!1,backend:`xctest`,producer:`apple-runner`,...a.viewport?{viewport:a.viewport}:{},...r.quality?{quality:r.quality}:{},...r.systemSurface?{systemSurface:r.systemSurface}:{},...r.keyboard?{keyboard:r.keyboard}:{},...r.targetActivation?{targetActivation:r.targetActivation}:{},...i.length>0?{warnings:i}:{}}}function qn(e,n,r){if(!((r.nodes?.length??0)>0)&&!Xn(n,r.quality)&&e.kind===`simulator`)throw new t(`COMMAND_FAILED`,`XCTest snapshot returned 0 nodes on iOS simulator.`)}function Jn(e){let t=[];return!e.quality&&e.message&&t.push(e.message),e.systemSurface&&t.push(Te(e.systemSurface.bundleId)),e.targetActivation&&t.push(mt(e.targetActivation)),t}function Yn(e,t,n){return d(e)?{nodes:n.nodes??[]}:Rn(e.id,t,n)}function Xn(e,t){return ne(e?.scope)!==null&&t!==void 0&&t.state!==`sparse`}function Zn(e,t){return t?{...e,signal:e.signal?AbortSignal.any([e.signal,t]):t}:e}function Q(e,t){let n=e[t];return typeof n==`boolean`?n:void 0}function Qn(e,t){let n=e[t];return typeof n==`string`?n:void 0}function $n(e){let n=e.orientation;if(typeof n==`string`&&ve.includes(n))return n;throw new t(`COMMAND_FAILED`,`iOS runner returned an invalid orientation result`,{orientation:n})}function er(e,t,n,r){let i={...n,open:async()=>$(`open`),openDevice:async()=>$(`openDevice`),close:async()=>$(`close`),screenshot:async()=>$(`screenshot`),readClipboard:async()=>$(`readClipboard`),setSetting:async()=>$(`setSetting`),readSetting:async()=>$(`readSetting`)};return Se(i,n=>He(r,{deviceId:e.id,requestId:t.requestId},n))}function $(e){throw new t(`UNSUPPORTED_OPERATION`,`${e} uses local Apple tooling (simctl/devicectl), which an injected runner transport cannot reach; the provider session must supply its own ${e} implementation.`)}async function tr(e,n,r={},i,o){if(o){if(r.fullscreen)throw new t(`INVALID_ARGS`,`screenshot --fullscreen is not accepted on the macOS ${o} surface: its capture frame is fixed`,{reason:a.macOsHelperSurfaceFixedFrame,surface:o});return await Ye(n,{surface:o,...o===`app`?{bundleId:r.appBundleId}:{},signal:i.signal}),{}}return r.captureBackend===`runner`?(await V(e,n,r.appBundleId,r.fullscreen,i),{}):await Xt(e,n,{appBundleId:r.appBundleId,pixelDensity:r.pixelDensity,fullscreen:r.fullscreen,runnerOptions:i,normalizeStatusBar:r.normalizeStatusBar,skipIosSimulatorBootCheck:r.skipIosSimulatorBootCheck})}async function nr(e,t,n,r){let{runMacOsReadTextAction:i}=await import(`./helper.js`).then(e=>e.n);return(await i(e.x,e.y,{bundleId:n,surface:t,signal:r})).text}async function rr(e,t,n,r){let i=await k(e,{command:`readText`,x:t.x,y:t.y,appBundleId:n?.appBundleId},n?.signal?{...r,signal:n.signal}:r);return typeof i.text==`string`?i.text:typeof i.message==`string`?i.message:void 0}export{Wn as createAppleInteractor};
|
|
3
|
+
`).replace(/\n$/,``))}async function Ct(e,t,n){if(d(e)){await ut(t);return}if(D(e,`clipboard`),f(e)){let r=n?.signal;await O(e,{signal:r}),h(await T(e,[`pbcopy`,e.id],{allowFailure:!0,stdin:t,signal:r}),`Failed to write tvOS simulator clipboard`);return}await E(e,{command:`pasteboardWrite`,text:t},n)}function A(e,n){if(!re(e))throw new t(`UNSUPPORTED_OPERATION`,n.message,{deviceId:e.id,appleOs:ee(e),deviceKind:e.kind,reason:n.reason,hint:n.hint})}async function wt(e,t){A(e,pe);let n=he(t);return await T(e,[`ui`,e.id,`content_size`,n]),ue(n,n)}async function Tt(e){A(e,pe),await O(e);let n=h(await T(e,[`ui`,e.id,`content_size`],{allowFailure:!0}),`Failed to read iOS content size category`),r=n.stdout.trim(),i=le(r);if(i===void 0)throw new t(`COMMAND_FAILED`,`iOS simulator reported an unknown text size: ${r||`(empty)`}`,{deviceId:e.id,stdout:n.stdout,stderr:n.stderr,hint:"Boot the simulator, or run `xcrun simctl ui <device> content_size` to see what it reports."});return ue(i,r)}const Et=[`--time`,`9:41`,`--dataNetwork`,`wifi`,`--wifiMode`,`active`,`--wifiBars`,`3`,`--batteryState`,`charged`,`--batteryLevel`,`100`],Dt={0:`hide`,1:`wifi`,6:`3g`,7:`4g`,8:`lte`,9:`lte-a`,10:`lte+`,11:`5g`,12:`5g+`,13:`5g-uwb`,14:`5g-uc`},Ot={1:`searching`,2:`failed`,3:`active`},kt={0:`notSupported`,1:`searching`,2:`failed`,3:`active`},j=new Set;async function At(e){let t=null,n=!1;if(Mt(e))n=!0;else try{t=await Nt(e),n=!0}catch(t){L(e,`snapshot_failed`,t)}try{(!n||t)&&await F(e),await I(e,Et)}catch(t){L(e,`prepare_failed`,t)}return async()=>{await jt(e,n?t:null)}}async function jt(e,t){if(await F(e),!t){N(e);return}await I(e,Ft(t)),M(e)}function M(e){j.delete(P(e))}function N(e){j.add(P(e))}function Mt(e){return j.has(P(e))}function P(e){return`${e.platform}:${e.kind}:${e.id}`}async function Nt(e){return Pt(h(await T(e,[`status_bar`,e.id,`list`],{allowFailure:!0}),`Failed to read simulator status bar overrides`).stdout)}async function F(e){await T(e,[`status_bar`,e.id,`clear`])}async function I(e,t){t.length!==0&&await T(e,[`status_bar`,e.id,`override`,...t])}function Pt(e){let n={},r=e.split(`
|
|
4
|
+
`).map(e=>e.trim()).filter(e=>e.length>0&&e!==`Current Status Bar Overrides:`&&!/^=+$/.test(e));for(let e of r){let r=/^DataNetworkType:\s+(\d+)$/.exec(e);if(r){let e=Number(r[1]),i=Dt[e];if(!i)throw new t(`COMMAND_FAILED`,`Unsupported simulator data network type: ${e}`);n.dataNetwork=i;continue}let i=/^WiFi Mode:\s+(\d+),\s+WiFi Bars:\s+(\d+)$/.exec(e);if(i){let e=Ot[Number(i[1])];e&&(n.wifiMode=e),n.wifiBars=i[2];continue}let a=/^Cell Mode:\s+(\d+),\s+Cell Bars:\s+(\d+)$/.exec(e);if(a){let e=Number(a[1]),r=kt[e];if(!r)throw new t(`COMMAND_FAILED`,`Unsupported simulator cellular mode: ${e}`);n.cellularMode=r,n.cellularBars=a[2];continue}let o=/^Operator Name:\s*(.*)$/.exec(e);if(o){n.operatorName=o[1]??``;continue}}return Object.keys(n).length===0?null:n}function Ft(e){let t=[];return e.dataNetwork&&t.push(`--dataNetwork`,e.dataNetwork),e.wifiMode&&t.push(`--wifiMode`,e.wifiMode),e.wifiBars!==void 0&&(e.dataNetwork===`wifi`||e.wifiMode)&&t.push(`--wifiBars`,e.wifiBars),e.cellularMode&&t.push(`--cellularMode`,e.cellularMode),e.cellularBars!==void 0&&(e.cellularMode||It(e.dataNetwork)||e.operatorName!==void 0)&&t.push(`--cellularBars`,e.cellularBars),e.operatorName!==void 0&&t.push(`--operatorName`,e.operatorName),t}function It(e){return!!(e&&e!==`hide`&&e!==`wifi`)}function L(e,t,n){u({level:`warn`,phase:`ios_screenshot_status_bar_${t}`,data:{platform:e.platform,deviceKind:e.kind,deviceId:e.id,...b(n)}})}async function Lt(n,r,i,a,o){if(d(n)){let e=r.toLowerCase();if(e===`appearance`){await lt(i);return}if(e===`permission`){let e=me(i);if(e===`deny`)throw new t(`INVALID_ARGS`,de(`permission`));let n=Ut(o?.permissionTarget);return await it(e,n)}throw new t(`INVALID_ARGS`,de(r))}D(n,`settings`),await O(n);let s=r.toLowerCase();switch(s){case`clear-app-state`:{if(i.toLowerCase()!==`clear`)throw new t(`INVALID_ARGS`,`settings clear-app-state only supports clear.`);if(!a)throw new t(`INVALID_ARGS`,`settings clear-app-state requires an app id or an active app session.`,e());let r=await Ht(n,a);return{bundleId:r.bundleId,containerPath:r.containerPath,cleared:!0}}case`reset-keychain`:if(i.toLowerCase()!==`clear`)throw new t(`INVALID_ARGS`,`settings reset-keychain only supports clear.`);return await T(n,[`keychain`,n.id,`reset`]),{scope:`simulator`,cleared:!0,message:`Reset the whole iOS simulator keychain. This clears keychain-backed credentials for every installed app, not just the app under test.`};case`wifi`:{let e=m(i)?`active`:`failed`;await T(n,[`status_bar`,n.id,`override`,`--wifiMode`,e]),M(n);return}case`airplane`:m(i)?(await T(n,[`status_bar`,n.id,`override`,`--dataNetwork`,`hide`,`--wifiMode`,`failed`,`--wifiBars`,`0`,`--cellularMode`,`failed`,`--cellularBars`,`0`,`--operatorName`,``]),M(n)):(await T(n,[`status_bar`,n.id,`clear`]),N(n));return;case`faceid`:case`touchid`:{A(n,fe);let e=s,t=Wt[e];await Kt(n,Gt(i,e),{settingName:e,notificationModality:t.notificationModality});return}case`text-size`:return await wt(n,i);case`appearance`:case`permission`:case`location`:return await pt({runSimctl:e=>T(n,e),udid:n.id,deviceId:n.id,setting:s,state:i,appBundleId:a,options:o});default:throw new t(`INVALID_ARGS`,`Unsupported setting: ${r}`)}}const Rt={"text-size":Tt};async function zt(e,t){return await Rt[t](e)}const Bt=[`Documents`,`Library/Caches`,`Library/Preferences`,`SystemData`,`tmp`];function Vt(e){return`${e} has no data container to clear. Apps shipped in the simulator runtime, such as system apps, own no data container, so there is no app state here to remove.`}async function Ht(e,n){if(!te(e)||e.kind!==`simulator`)throw new t(`UNSUPPORTED_OPERATION`,`Clearing app state is currently supported only on iOS simulators.`);let r=await st(e,n);await O(e),await $e(e,r);let i=h(await T(e,[`get_app_container`,e.id,r,`data`],{allowFailure:!0}),`simctl get_app_container failed for ${r}`),a=Xe(i.stdout);if(a===void 0)throw new t(`UNSUPPORTED_OPERATION`,Vt(r),{reason:`app-no-data-container`,appBundleId:r,deviceId:e.id,hint:`Clear the app under test instead. A runtime-shipped app keeps no data container, so this command has no app state to remove; to reset it, erase or recreate the simulator device, or uninstall and reinstall the app if you installed it yourself.`});let o=await Re(a);return await Promise.all(o.filter(e=>e!==`.com.apple.mobile_container_manager.metadata.plist`).map(e=>Le(k.join(a,e)))),await Promise.all(Bt.map(e=>ze(k.join(a,e)))),{bundleId:r,containerPath:a}}function Ut(e){let n=e?.trim().toLowerCase();if(n===`accessibility`||n===`screen-recording`||n===`input-monitoring`)return n;throw new t(`INVALID_ARGS`,`Unsupported macOS permission target. Use accessibility|screen-recording|input-monitoring.`)}const Wt={faceid:{notificationModality:`pearl`},touchid:{notificationModality:`fingerTouch`}};function Gt(e,n){let r=e.trim().toLowerCase();if(r===`match`)return`match`;if(r===`nonmatch`)return`nonmatch`;if(r===`enroll`)return`enroll`;if(r===`unenroll`)return`unenroll`;throw new t(`INVALID_ARGS`,`Invalid ${n} state: ${e}. Use match|nonmatch|enroll|unenroll.`)}async function Kt(e,n,i){let a=w(e,Yt(e.id,n,i.notificationModality)),o=await We(a,{allowFailure:!0}),s=[];if(o.exitCode!==0)s.push({args:a,stderr:o.stderr,stdout:o.stdout,exitCode:o.exitCode});else{let t=qt(n);if(t!==void 0){let n=await Jt(e);if(n.state===t)return;s.push({args:n.args,stderr:n.stderr,stdout:n.stdout,exitCode:n.exitCode})}else return}throw new t(`COMMAND_FAILED`,`Failed to simulate ${i.settingName}.`,{deviceId:e.id,action:n,setting:i.settingName,attempts:r(s)})}const R=`com.apple.BiometricKit.enrollmentChanged`;function qt(e){if(e===`enroll`)return`1`;if(e===`unenroll`)return`0`}async function Jt(e){let t=w(e,[`spawn`,e.id,`notifyutil`,`-g`,R]),n=await We(t,{allowFailure:!0}),r=n.stdout.split(`
|
|
5
|
+
`).map(e=>e.trim().split(/\s+/)).find(e=>e[0]===R)?.[1];return{args:t,stderr:n.stderr,stdout:n.stdout,exitCode:n.exitCode,state:n.exitCode===0?r:void 0}}function Yt(e,t,n){let r=[`spawn`,e,`notifyutil`];switch(t){case`match`:return[...r,`-p`,`com.apple.BiometricKit_Sim.${n}.match`];case`nonmatch`:return[...r,`-p`,`com.apple.BiometricKit_Sim.${n}.nomatch`];case`enroll`:return[...r,`-s`,R,`1`,`-p`,R];case`unenroll`:return[...r,`-s`,R,`0`,`-p`,R]}}function Xt(e){let t=e.screenshotMetadata;if(!t||typeof t!=`object`||Array.isArray(t))return;let n=t,r=z(n.displayID),i=z(n.pixelWidth),a=z(n.pixelHeight),o=Zt(n.pixelsPerPoint);if(r!==void 0&&i!==void 0&&a!==void 0&&o!==void 0)return Object.freeze({displayID:r,pixelWidth:i,pixelHeight:a,pixelsPerPoint:o})}function z(e){return typeof e==`number`&&Number.isInteger(e)&&e>0?e:void 0}function Zt(e){return typeof e==`number`&&Number.isFinite(e)&&e>0?e:void 0}const Qt={ensureBooted:O,prepareStatusBarForScreenshot:At,resolveCaptureTarget:dt,captureWithRetry:tn,normalizeDensity:dn,captureWithRunner:H,shouldFallbackToRunner:ln},B=new Map,V=new Map;async function $t(e,t,n={}){return d(e)?(await H(e,t,n.appBundleId,n.fullscreen,n.runnerOptions),{}):e.kind===`simulator`?await en(e,t,n):(await x(e).captureScreenshot(e,t,{appBundleId:n.appBundleId,fullscreen:n.fullscreen,runnerOptions:n.runnerOptions,runRunnerCommand:E}),{})}async function en(e,n,r={}){if(e.kind!==`simulator`)throw new t(`UNSUPPORTED_OPERATION`,`Simulator screenshot fallback flow supports only iOS simulators`);let i={...Qt,...r.deps??{}};r.skipIosSimulatorBootCheck||await i.ensureBooted(e);let{display:a,displayRotation:o}=await i.resolveCaptureTarget(e),s=o?{displayRotation:o}:{},c=async()=>{await i.captureWithRetry(e,n,a),await i.normalizeDensity(e,n,r.pixelDensity,a?.pointScale)},l=async()=>{};if(r.normalizeStatusBar===!0)try{l=await i.prepareStatusBarForScreenshot(e)}catch(t){sn(e,`prepare_failed`,t)}try{try{return await c(),s}catch(t){let n=t;if(r.skipIosSimulatorBootCheck&&un(t)){await i.ensureBooted(e);try{return await c(),s}catch(e){n=e}}if(!i.shouldFallbackToRunner(n))throw n;on(e,`simctl_screenshot`,n)}let t=await i.captureWithRunner(e,n,r.appBundleId,r.fullscreen,r.runnerOptions);return await i.normalizeDensity(e,n,r.pixelDensity,t?.pixelsPerPoint),s}finally{await l().catch(t=>sn(e,`restore_failed`,t))}}async function tn(e,t,n){let r=xe.fromTimeoutMs(Ve),i=[`io`,e.id,`screenshot`,...ft(n),t];await be(async({deadline:t})=>{await T(e,i,{timeoutMs:Math.max(1e3,t?.remainingMs()??2e4)})},{maxAttempts:5,baseDelayMs:Be,maxDelayMs:Ue,jitter:.2,shouldRetry:e=>ln(e)},{deadline:r,phase:`ios_simulator_screenshot`})}async function H(e,n,r,i,a){if(e.kind===`device`&&!d(e)){await x(e).captureScreenshot(e,n,{appBundleId:r,fullscreen:i,runnerOptions:a,preferRunner:!0,runRunnerCommand:E});return}let o=await E(e,{command:`screenshot`,appBundleId:r,fullscreen:i,inlineScreenshot:!1},a),s=o.message;if(!s)throw new t(`COMMAND_FAILED`,`Failed to capture iOS screenshot: runner returned no file path`);let c=Xt(o);if(d(e))return await v(s,n),c;if(e.kind===`simulator`)return await nn(e,s,n),c;throw new t(`COMMAND_FAILED`,`Unsupported Apple screenshot target`)}async function nn(e,n,r){let i=xe.fromTimeoutMs(y),a=`Unable to locate runner container for simulator screenshot`,o=V.get(e.id);if(o){let t=await rn(o,n,r);if(t.copied)return;a=t.error,V.delete(e.id)}for(let t of Ye){let o=await T(e,[`get_app_container`,e.id,t,`data`],{allowFailure:!0,timeoutMs:an(i,y,`runner screenshot container lookup`)});if(o.exitCode!==0){let e=o.stderr.trim();e&&(a=e);continue}let s=Xe(o.stdout);if(s===void 0){a=`simctl get_app_container returned no data container path`;continue}let c=await rn(s,n,r);if(c.copied){V.set(e.id,s);return}a=c.error}throw new t(`COMMAND_FAILED`,`Failed to capture iOS screenshot: ${a}`)}async function rn(e,t,n){let r=`Runner screenshot was not found in the simulator container`;for(let i of cn(e,t))try{return await v(i,n),{copied:!0}}catch(e){r=e instanceof Error?e.message:String(e)}return{copied:!1,error:r}}function an(e,n,r){let i=e.remainingMs();if(i>0)return i;throw new t(`COMMAND_FAILED`,`iOS ${r} timed out after ${n}ms`,{timeoutMs:n,step:r})}function on(e,t,n){let r=b(n);u({level:`warn`,phase:`ios_screenshot_fallback`,data:{platform:e.platform,deviceKind:e.kind,deviceId:e.id,from:t,to:`runner`,...r}})}function sn(e,t,n){u({level:`warn`,phase:`ios_screenshot_status_bar_${t}`,data:{platform:e.platform,deviceKind:e.kind,deviceId:e.id,...b(n)}})}function cn(e,t){let n=k.resolve(e),r=t.trim();if(!r)return[];let i=[],a=new Set,o=e=>{let t=k.normalize(e);a.has(t)||(a.add(t),i.push(t))},s=r.replace(/^\/+/,``),c=s.replaceAll(`\\`,`/`);if(s&&o(k.join(n,s)),k.isAbsolute(r)&&o(k.normalize(r)),c.startsWith(`tmp/`))o(k.join(n,c));else{let e=c.lastIndexOf(`/tmp/`);if(e>=0){let t=c.slice(e+1);o(k.join(n,t))}}let l=k.basename(r);return l&&o(k.join(n,`tmp`,l)),i}function ln(e){if(!(e instanceof t)||e.code!==`COMMAND_FAILED`)return!1;let n=Ge(e);return n.includes(`timeout waiting for screen surfaces`)||n.includes(`nsposixerrordomain`)&&n.includes(`code=60`)&&n.includes(`screenshot`)||n.includes(`timed out`)&&n.includes(`screenshot`)}function un(e){if(!(e instanceof t)||e.code!==`COMMAND_FAILED`)return!1;let n=Ge(e);return n.includes(`not booted`)||n.includes(`current state: shutdown`)||n.includes(`current state is shutdown`)||n.includes(`current state=shutdown`)||n.includes(`state: shutdown`)||n.includes(`state=shutdown`)}async function dn(e,t,n,r){let i=r??await fn(e),a=Fe(await Pe(t),i,n);a&&await ke(t,a.width,a.height)}async function fn(e){let n=B.get(e.id);if(n!==void 0)return n;let r=await T(e,[`getenv`,e.id,`SIMULATOR_MAINSCREEN_SCALE`],{timeoutMs:He}),i=Number(r.stdout.trim());if(!Number.isFinite(i)||i<=0)throw new t(`COMMAND_FAILED`,`Failed to read iOS simulator screenshot scale from SIMULATOR_MAINSCREEN_SCALE`);return B.set(e.id,i),i}function pn(e){return!(e instanceof t)||e.details?.runnerErrorCode!==`SCROLL_KEYBOARD_OCCLUDES_SURFACE`?e:new t(e.code,e.message,{...e.details,...se})}function mn(e){let t=e?.amount!==void 0||e?.pixels!==void 0;return{...e,...t?{}:{amount:ve},durationMs:e?.durationMs??400,releaseBehavior:e?.releaseBehavior??`controlled`}}function U(e,t,n,r={includeDuration:!0}){let i=W(e.referenceWidth),a=W(e.referenceHeight);if(i===void 0||a===void 0)return G(e,{amount:n?.amount});let o=oe({direction:t,amount:n?.amount,pixels:n?.pixels,referenceWidth:i,referenceHeight:a});return G(e,{amount:n?.amount,pixels:o.pixels,durationMs:r?.includeDuration?n?.durationMs:void 0,preferProvidedPixels:!0})}function hn(e,t={}){return{...e?.amount===void 0?{}:{amount:e.amount},...e?.pixels===void 0?{}:{pixels:e.pixels},...t.includeDuration!==!1&&e?.durationMs!==void 0?{durationMs:e.durationMs}:{},...t.includeReleaseBehavior!==!1&&e?.releaseBehavior!==void 0?{scrollReleaseBehavior:e.releaseBehavior}:{}}}function W(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}function G(e,t){let{x1:n,y1:r,x2:i,y2:a}=_n(e),o=W(e.referenceWidth),s=W(e.referenceHeight),c=gn(t,n!==void 0&&i!==void 0?Math.round(Math.abs(i-n)):void 0,r!==void 0&&a!==void 0?Math.round(Math.abs(a-r)):void 0),l=W(e.keyboardMinY);return{...n===void 0?{}:{x1:n},...r===void 0?{}:{y1:r},...i===void 0?{}:{x2:i},...a===void 0?{}:{y2:a},...o===void 0?{}:{referenceWidth:o},...s===void 0?{}:{referenceHeight:s},...e.keyboardAvoided===!0?{keyboardAvoided:!0}:{},...l===void 0?{}:{keyboardMinY:l},...t?.amount===void 0?{}:{amount:t.amount},...c===void 0?{}:{pixels:c},...t?.durationMs===void 0?{}:{durationMs:t.durationMs}}}function gn(e,t,n){if(e?.preferProvidedPixels&&e.pixels!==void 0)return e.pixels;if(t!==void 0&&t>0)return t;if(n!==void 0&&n>0)return n}function _n(e){let t=W(e.x),n=W(e.y),r=W(e.x2),i=W(e.y2);return{...t===void 0?{}:{x1:t},...n===void 0?{}:{y1:n},...r===void 0?{}:{x2:r},...i===void 0?{}:{y2:i}}}async function vn(e,t,n,r,i,a){return U(await e(t,{command:`desktopScroll`,direction:i,...hn(a,{includeDuration:!0,includeReleaseBehavior:!1}),appBundleId:n.appBundleId},r),i,a,{includeDuration:!0})}function K(e,t,n){return{command:`remotePress`,remoteButton:e,...n===void 0?{}:{durationMs:n},...t===void 0?{}:{appBundleId:t}}}function yn(e){return e===`system`?`backSystem`:`backInApp`}function bn(e,t){let n={signal:t.signal,verbose:t.verbose,logPath:t.logPath,traceLogPath:t.traceLogPath,requestId:t.requestId,iosXctestrunFile:t.iosXctestrunFile,iosXctestDerivedDataPath:t.iosXctestDerivedDataPath,iosXctestEnvDir:t.iosXctestEnvDir,runnerLeaseContext:t.runnerLeaseContext};return{runnerOpts:n,overrides:{tap:async(r,i)=>await E(e,J(e,t,r,i),n),pressPoint:async(r,i)=>await xn(e,t,n,r,i),tapElementSelector:async r=>await E(e,{command:`tap`,selectorKey:r.key,selectorValue:r.value,allowNonHittableCoordinateFallback:r.allowNonHittableCoordinateFallback,...r.expectedPoint?{x:r.expectedPoint.x,y:r.expectedPoint.y}:{},...ne(e)?{synthesized:!0}:{},appBundleId:t.appBundleId},n),doubleTap:async(r,i)=>{let a=await E(e,S([{kind:`doubleTap`,x:r,y:i}],t.appBundleId),n);return C(a),a},appState:async()=>En(await E(e,{command:`appState`,appBundleId:t.appBundleId},n)),longPress:async(r,i,a)=>await E(e,{command:`longPress`,x:r,y:i,durationMs:a,appBundleId:t.appBundleId},n),focus:async(r,i)=>await E(e,J(e,t,r,i),n),type:async(r,i)=>Tn(await E(e,{command:`type`,text:r,delayMs:i,textEntryMode:r===`
|
|
6
|
+
`?void 0:`append`,appBundleId:t.appBundleId},n)),fill:async(r,i,a,o,s)=>await E(e,{command:`type`,x:r,y:i,text:a,delayMs:o,textEntryMode:`replace`,...s?.allowNonHittableCoordinateFallback?{allowNonHittableCoordinateFallback:!0}:{},appBundleId:t.appBundleId},n),scroll:async(r,i)=>await jn(E,e,t,n,r,i),performGesture:async r=>await kn(e,t,n,r),gestureViewport:async()=>On(await E(e,{command:`gestureViewport`,appBundleId:t.appBundleId},n))}}}async function xn(e,t,n,r,i){let a=d(e)?p(i.surface,`xctest`):void 0;return a?await Sn(t,r,i,a):i.button===`primary`?i.count===1?await wn(e,t,n,r,i):await Ke(e,r,i,t.appBundleId,async t=>await E(e,t,n)):await Cn(e,t,n,r,i.button)}async function Sn(e,n,r,i){if(r.button!==`primary`)throw new t(`UNSUPPORTED_OPERATION`,`${r.button} click is not supported on macOS ${i} sessions.`);let{runMacOsPressAction:a}=await import(`./helper.js`).then(e=>e.n),o=await a(n.x,n.y,{bundleId:e.appBundleId,surface:i,holdMs:r.holdMs,clicks:r.count,doubleClick:r.doubleTap,intervalMs:r.intervalMs,signal:e.signal});return o.holdMs===void 0?{}:{holdMs:o.holdMs}}async function Cn(e,t,n,r,i){return await E(e,{command:`mouseClick`,x:r.x,y:r.y,button:i,appBundleId:t.appBundleId},n)}async function wn(e,t,n,r,i){if(i.doubleTap){let i=await E(e,S([{kind:`doubleTap`,x:r.x,y:r.y}],t.appBundleId),n);return C(i),i}return i.holdMs>0?await E(e,{command:`longPress`,x:r.x,y:r.y,durationMs:i.holdMs,appBundleId:t.appBundleId},n):await E(e,J(e,t,r.x,r.y),n)}function Tn(e){let t=e.textEntryRoute;return Dn(t)?{textEntryRoute:t}:{}}function En(e){let t=e.applicationState;return i(t)?{applicationState:t}:{}}function Dn(e){return typeof e==`string`&&mt.includes(e)}function On(e){let n=q(e.x),r=q(e.y),i=q(e.x2),a=q(e.y2);if(n===void 0||r===void 0||i===void 0||a===void 0||i<=0||a<=0)throw new t(`COMMAND_FAILED`,`Apple runner returned an invalid gesture viewport`);return{x:n,y:r,width:i,height:a}}function q(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}async function kn(e,t,n,r){if(r.topology===`two`&&ht(e,r.intent),r.topology===`single`&&d(e)){let{start:i,end:a}=Ce(r);return await E(e,{command:`drag`,x:i.x,y:i.y,x2:a.x,y2:a.y,durationMs:r.durationMs,appBundleId:t.appBundleId},n)}if(r.topology===`single`&&f(e)){let{start:i,end:a}=Ce(r);return await E(e,{command:`swipe`,direction:An(i,a),appBundleId:t.appBundleId},n)}return await E(e,{command:`gesture`,gesturePlan:r,appBundleId:t.appBundleId},n)}function An(e,t){let n=t.x-e.x,r=t.y-e.y;return Math.abs(n)>=Math.abs(r)?n>=0?`right`:`left`:r>=0?`down`:`up`}function J(e,t,n,r){return{command:`tap`,x:n,y:r,...ne(e)?{synthesized:!0}:{},appBundleId:t.appBundleId}}async function jn(e,t,n,r,i,a){if(ge(a?.durationMs,{invalidMessage:`scroll durationMs must be a non-negative integer at most ${_e}`}),f(t))return G(await e(t,K(i,n.appBundleId,a?.durationMs),r),{amount:a?.amount,durationMs:a?.durationMs});if(ce(a??{}),d(t))return await vn(e,t,n,r,i,a);let o=mn(a),s;try{s=await e(t,{command:`scroll`,direction:i,...hn(o),appBundleId:n.appBundleId},r)}catch(e){throw pn(e)}return U(s,i,o)}const Mn=p(`app`,`native`),Nn=`The native macOS app backend acts through accessibility actions only. Unset AGENT_DEVICE_MACOS_APP_BACKEND to drive this app with XCTest.`,Pn=new Set(at);function Fn(e,t){let n=()=>{if(t.appBundleId)return t.appBundleId;throw Y(`an action on a session that names no app`)},r=async(e,r={})=>In(await X(et(e.x,e.y,{surface:Mn,bundleId:n(),clicks:r.count,intervalMs:r.intervalMs,signal:t.signal})));return{open:e.open,openDevice:e.openDevice,close:e.close,screenshot:e.screenshot,snapshot:e.snapshot,readTextAtPoint:e.readTextAtPoint,readClipboard:e.readClipboard,writeClipboard:e.writeClipboard,setSetting:e.setSetting,readAlert:e.readAlert,awaitAlert:e.awaitAlert,acceptAlert:e.acceptAlert,dismissAlert:e.dismissAlert,tap:async(e,t)=>await r({x:e,y:t}),pressPoint:async(t,n)=>{if(n.surface!==void 0&&n.surface!==`app`)return await e.pressPoint(t,n);if(n.button!==`primary`)throw Y(`${n.button} click`);if(n.doubleTap)throw Y(`double-click`);if(n.holdMs>0)throw Y(`press and hold`);return await r(t,n)},longPress:async()=>{throw Y(`press and hold`)},focus:async(e,t)=>await r({x:e,y:t}),type:async(e,r)=>{await X(tt(e,{bundleId:n(),delayMs:r,signal:t.signal}))},fill:async(e,r,i)=>In(await X(rt(e,r,i,{bundleId:n(),signal:t.signal}))),scroll:async(e,r)=>{ce(r??{});let i=await X(ot(e,{bundleId:n(),amount:r?.amount,pixels:r?.pixels,signal:t.signal}));return{...U(i,e,r,{includeDuration:!1}),mechanism:i.mechanism}},back:async()=>{throw Y(`back`)},setOrientation:async()=>{throw Y(`orientation`)}}}function In(e){return{mechanism:e.mechanism,...e.windowTitle===void 0?{}:{windowTitle:e.windowTitle}}}function Y(e){return new t(`UNSUPPORTED_OPERATION`,`${e} is not supported by the native macOS app backend.`,{reason:`unsupported-device-backend`,hint:Nn})}async function X(e){try{return await e}catch(e){if(!(e instanceof t))throw e;let n=e.details?.reason;throw typeof n!=`string`||!Pn.has(n)?e:new t(`UNSUPPORTED_OPERATION`,e.message,{...e.details,reason:`unsupported-device-backend`,helperReason:n,hint:Nn},e)}}const Ln={0:`unknown`,1:`notRunning`,2:`runningBackgroundSuspended`,3:`runningBackground`};function Rn(e,t){if(typeof e!=`object`||!e||Array.isArray(e))return;let r={...e},i=r.reason;if(!n(i))return;let a=r.priorState;if(typeof a!=`number`||!Number.isInteger(a))return;let o=Ln[a];o===void 0&&t?.({reason:i,rawPriorState:a});let s=r.otherActiveApplicationPid;return{reason:i,priorState:o??`unknown`,...typeof s==`number`&&Number.isInteger(s)&&s>0?{otherActiveApplicationPid:s}:{}}}function zn(e){let t=Bn(e.systemSurface),n=s(e.keyboard),r=o(e.observation),i=Rn(e.targetActivation,e=>Je({level:`debug`,phase:`ios_runner_target_activation_prior_state_unmapped`,data:e}));return{nodes:Array.isArray(e.nodes)?e.nodes:void 0,truncated:typeof e.truncated==`boolean`?e.truncated:void 0,quality:Ae(e.snapshotQuality),qualityPayload:Wn(e.qualityPayload,t),runnerFatal:e.runnerFatal===!0,...n?{keyboard:n}:{},...t?{systemSurface:t}:{},...i?{targetActivation:i}:{},...r?{observation:r}:{},message:typeof e.message==`string`&&e.message.trim().length>0?e.message:void 0}}function Bn(e){if(!c(e)||typeof e.bundleId!=`string`)return;let t=Oe(e.bundleId);return t&&{bundleId:t.bundleId,kind:t.kind}}function Vn(e,t,n){let r=n.nodes??[],i=Gn(r,n.qualityPayload?.nodes);if(n.runnerFatal===!0||r.length===0&&n.qualityPayload===void 0)return{nodes:r};let a=Ee({raw:t?.raw,interactiveOnly:t?.interactiveOnly,depth:t?.depth,scope:t?.scope,customActions:t?.customActions}),o={stage:`presented`,presentation:{producer:`apple-runner`,intent:`full`,payload:{nodes:r,truncated:n.truncated??!1,...n.quality?.effectiveDepth===void 0?{}:{effectiveDepth:n.quality.effectiveDepth}},...n.qualityPayload?{qualityPayload:n.qualityPayload}:{}},validation:{presentationKey:Te(a),viewport:i,hittability:{kind:`available`},lineage:{targetId:e},residue:[]}};try{let e=Ie(o,a),t=ae(e.validatedViewport);return{nodes:e.nodes,...t?{viewport:t}:{}}}catch(e){Hn(e,n)}}function Hn(e,n){let r=n.quality;if(e instanceof _&&Me(r))throw new t(`COMMAND_FAILED`,e.message,{...g(e),...n.systemSurface?{systemSurface:n.systemSurface}:{},snapshotQuality:{state:r.state,backend:r.backend,...r.reason?{reason:r.reason}:{},...r.reasonCode?{reasonCode:r.reasonCode}:{}},hint:Un(n.systemSurface,r)},e);Z(e,n.systemSurface)}function Un(e,t){return[e?`${e.bundleId} hosts the surface presented over the app, and this capture targeted that surface.`:void 0,...je(t,[])].filter(e=>e!==void 0).join(` `)}function Wn(e,t){if(e!==void 0)return(!c(e)||!Array.isArray(e.nodes)||typeof e.truncated!=`boolean`)&&Z(new _(`invalid-quality-payload`,`iOS runner returned an invalid quality payload`),t),e.scope!==void 0&&e.scope!==null&&Z(new _(`invalid-quality-payload`,`iOS runner quality payload must be unscoped`,{field:`scope`}),t),{nodes:e.nodes,truncated:e.truncated,scope:null}}function Gn(e,t){return Ne(Kn(t),{fallbackToLargestRoot:!0})??Ne(Kn(e),{fallbackToLargestRoot:!0})??{kind:`missing`,reason:`not-provided`}}function Kn(e){return e?.filter(e=>e.parentIndex===void 0)??[]}function Z(e,n){throw e instanceof _?new t(`COMMAND_FAILED`,e.message,{...g(e),...n?{systemSurface:n}:{}},e):e}function qn(e,n,r){if(e.appleOs===`watchos`)throw new t(`UNSUPPORTED_PLATFORM`,`watchOS is not supported: XCUITest cannot drive watchOS UI, so this device has no runner backend.`);let{overrides:i,runnerOpts:a}=bn(e,n),o=d(e)?gt():`xctest`,s=t=>d(e)?p(t,o):void 0,c={open:(t,n)=>Ze(e,t,{appBundleId:n?.appBundleId,launchConsole:n?.launchConsole,launchArgs:n?.launchArgs,terminateRunningApp:n?.terminateRunningApp,url:n?.url,runnerOptions:a}),openDevice:()=>Qe(e),close:t=>$e(e,t,a),screenshot:(t,n)=>or(e,t,n,a,s(n?.surface)),snapshot:async t=>await Jn(e,t,a,s(t?.surface)),readTextAtPoint:async(t,n)=>{let r=s(n?.surface);return r?await sr(t,r,n?.appBundleId,n?.signal):await cr(e,t,n,a)},findText:async(t,n)=>({found:(await E(e,{command:`findText`,text:t,appBundleId:n?.appBundleId},n?.signal?{...a,signal:n.signal}:a))?.found===!0}),back:async t=>{if(f(e)){await E(e,K(`menu`,n.appBundleId),a);return}await E(e,{command:yn(t),appBundleId:n.appBundleId},a)},home:async()=>{if(f(e)){await E(e,K(`home`,n.appBundleId),a);return}await E(e,{command:`home`,appBundleId:n.appBundleId},a)},setOrientation:async r=>{let i=ir(await E(e,{command:`rotate`,orientation:r,appBundleId:n.appBundleId},a));if(i!==r)throw new t(`COMMAND_FAILED`,`iOS runner observed ${i} after requesting ${r}`,{requestedOrientation:r,observedOrientation:i});return{orientation:i}},appSwitcher:async()=>{await E(e,{command:`appSwitcher`,appBundleId:n.appBundleId},a)},actionButton:async()=>{await E(e,{command:`actionButton`,appBundleId:n.appBundleId},a)},tvRemote:async(t,r)=>{await E(e,K(Se(t),n.appBundleId,r),a)},keyboardDismiss:async()=>{let t=await E(e,{command:`keyboardDismiss`,appBundleId:n.appBundleId},a);return{kind:`mechanism`,wasVisible:Q(t,`wasVisible`),dismissed:Q(t,`dismissed`),visible:Q(t,`visible`),mechanism:rr(t,`keyboardDismissMechanism`)}},keyboardEnter:async()=>{let t=await E(e,{command:`keyboardReturn`,appBundleId:n.appBundleId},a);return{kind:`visibility-echo`,visible:Q(t,`visible`),wasVisible:Q(t,`wasVisible`)}},readClipboard:()=>St(e),writeClipboard:t=>Ct(e,t,a),setSetting:(t,n,r,i)=>Lt(e,t,n,r,i),readSetting:t=>zt(e,t),readAlert:t=>_t(e,a,t),awaitAlert:t=>vt(e,a,t),acceptAlert:t=>yt(e,a,`accept`,t),dismissAlert:t=>yt(e,a,`dismiss`,t),...i},l=o===`native`?Fn(c,n):c;return r?ar(e,n,l,r):l}async function Jn(e,t,n,r){return r?await bt({...t,surface:r},t?.signal):await Yn(e,t,n)}async function Yn(e,t,n){let r=zn(await l(`snapshot_capture`,async()=>await E(e,Xn(t),nr(n,t?.signal)),{backend:`xctest`}));Zn(t,r),Qn(e,t,r);let i=$n(r),a=er(e,t,r);return{nodes:a.nodes,truncated:r.truncated??!1,backend:`xctest`,producer:`apple-runner`,...a.viewport?{viewport:a.viewport}:{},...r.quality?{quality:r.quality}:{},...r.systemSurface?{systemSurface:r.systemSurface}:{},...r.keyboard?{keyboard:r.keyboard}:{},...r.targetActivation?{targetActivation:r.targetActivation}:{},...r.observation?{observation:r.observation}:{},...i.length>0?{warnings:i}:{}}}function Xn(e){let{appBundleId:t,interactiveOnly:n,preferredBackend:r,customActions:i,depth:a,scope:o,raw:s}=e??{};return{command:`snapshot`,appBundleId:t,interactiveOnly:n,preferredBackend:r,customActions:i,...e?.observeOnly===!0?{observeOnly:!0}:{},depth:a,scope:o,raw:s}}function Zn(e,n){if(e?.observeOnly===!0&&!(n.observation&&!n.targetActivation))throw new t(`COMMAND_FAILED`,`Runner did not return an observe-only snapshot.`,{reason:`observation-unavailable`})}function Qn(e,n,r){if(!((r.nodes?.length??0)>0)&&!tr(n,r.quality)&&e.kind===`simulator`)throw new t(`COMMAND_FAILED`,`XCTest snapshot returned 0 nodes on iOS simulator.`)}function $n(e){let t=[];return!e.quality&&e.message&&t.push(e.message),e.systemSurface&&t.push(De(e.systemSurface.bundleId)),e.targetActivation&&t.push(xt(e.targetActivation)),t}function er(e,t,n){return d(e)?{nodes:n.nodes??[]}:Vn(e.id,t,n)}function tr(e,t){return ie(e?.scope)!==null&&t!==void 0&&t.state!==`sparse`}function nr(e,t){return t?{...e,signal:e.signal?AbortSignal.any([e.signal,t]):t}:e}function Q(e,t){let n=e[t];return typeof n==`boolean`?n:void 0}function rr(e,t){let n=e[t];return typeof n==`string`?n:void 0}function ir(e){let n=e.orientation;if(typeof n==`string`&&ye.includes(n))return n;throw new t(`COMMAND_FAILED`,`iOS runner returned an invalid orientation result`,{orientation:n})}function ar(e,t,n,r){let i={...n,open:async()=>$(`open`),openDevice:async()=>$(`openDevice`),close:async()=>$(`close`),screenshot:async()=>$(`screenshot`),readClipboard:async()=>$(`readClipboard`),setSetting:async()=>$(`setSetting`),readSetting:async()=>$(`readSetting`)};return we(i,n=>qe(r,{deviceId:e.id,requestId:t.requestId},n))}function $(e){throw new t(`UNSUPPORTED_OPERATION`,`${e} uses local Apple tooling (simctl/devicectl), which an injected runner transport cannot reach; the provider session must supply its own ${e} implementation.`)}async function or(e,n,r={},i,o){if(o){if(r.fullscreen)throw new t(`INVALID_ARGS`,`screenshot --fullscreen is not accepted on the macOS ${o} surface: its capture frame is fixed`,{reason:a.macOsHelperSurfaceFixedFrame,surface:o});return await nt(n,{surface:o,...o===`app`?{bundleId:r.appBundleId}:{},signal:i.signal}),{}}return r.captureBackend===`runner`?(await H(e,n,r.appBundleId,r.fullscreen,i),{}):await $t(e,n,{appBundleId:r.appBundleId,pixelDensity:r.pixelDensity,fullscreen:r.fullscreen,runnerOptions:i,normalizeStatusBar:r.normalizeStatusBar,skipIosSimulatorBootCheck:r.skipIosSimulatorBootCheck})}async function sr(e,t,n,r){let{runMacOsReadTextAction:i}=await import(`./helper.js`).then(e=>e.n);return(await i(e.x,e.y,{bundleId:n,surface:t,signal:r})).text}async function cr(e,t,n,r){let i=await E(e,{command:`readText`,x:t.x,y:t.y,appBundleId:n?.appBundleId},n?.signal?{...r,signal:n.signal}:r);return typeof i.text==`string`?i.text:typeof i.message==`string`?i.message:void 0}export{qn as createAppleInteractor};
|
package/dist/src/interactors.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime.js";import{P as t}from"./sdk-contracts.js";import{
|
|
1
|
+
import{r as e}from"./rolldown-runtime.js";import{P as t}from"./sdk-contracts.js";import{E as n}from"./sdk-device.js";import{n as r,t as i}from"./register-builtins.js";import{AsyncLocalStorage as a}from"node:async_hooks";let o=[];const s=new a;async function c(e,t){return await s.run([...e],t)}function l(e,t){for(let n of d()){if(!n.ownsDevice(e))continue;let r=n.getInteractor(e,t);if(r)return r}}function u(e){return d().some(t=>t.ownsDevice(e))}function d(){return s.getStore()??o}function f(e,t={}){C(e);let n=e.map(e=>e.provider);return{providerRuntimes:Object.freeze([...e]),providerRuntimeIds:n,providerRuntimeRequiredIds:v([...n,...t.providerRuntimeRequiredIds??[]]),leaseLifecycleProvider:y(e),recoverableProviderIds:e.filter(e=>e.recoverExpiredLease!==void 0).map(e=>e.provider),recoverExpiredLease:_(e),cloudArtifactProvider:b(e),providerAppCatalog:x(e),deviceInventorySource:S(e),appleRunnerProvider:m(e),appleRunnerScreenRecordingTransport:p(e),providerDeviceRuntimeScope:async t=>await c(e,t)}}function p(e){if(e.some(g))return t=>{for(let n of e){if(!g(n)||!n.ownsDevice(t.device))continue;let e=n.getAppleRunnerScreenRecordingTransport(t.device);if(e)return e}}}function m(e){if(e.some(h))return t=>{for(let n of e){if(!h(n)||!n.ownsDevice(t.device))continue;let e=n.getAppleRunnerProvider(t.device);if(e)return e}}}function h(e){return`getAppleRunnerProvider`in e&&typeof e.getAppleRunnerProvider==`function`}function g(e){return`getAppleRunnerScreenRecordingTransport`in e&&typeof e.getAppleRunnerScreenRecordingTransport==`function`}function _(e){if(e.some(e=>e.recoverExpiredLease!==void 0))return async n=>{let r=e.find(e=>E(e,n.leaseProvider));if(!r?.recoverExpiredLease)throw new t(`UNSUPPORTED_OPERATION`,`Provider ${n.leaseProvider??`unknown`} cannot recover an expired lease.`,{provider:n.leaseProvider,leaseId:n.leaseId});await r.recoverExpiredLease(n)}}function v(e){return[...new Set(e)]}function y(e){if(e.length!==0)return{allocate:async(t,n)=>await T(e,`allocate`,t,n),heartbeat:async(t,n)=>await T(e,`heartbeat`,t,n),release:async(t,n)=>await T(e,`release`,t,n)}}function b(e){if(e.length!==0)return{listCloudArtifacts:async t=>await w(e,t)}}function x(e){let n=e.filter(e=>e.appCatalog!==void 0);if(n.length!==0)return{supports:e=>n.some(t=>E(t,e)),list:async(e,r)=>{let i=n.find(t=>E(t,e.provider));if(!i?.appCatalog)throw new t(`UNSUPPORTED_OPERATION`,`Provider ${e.provider} does not expose an app catalog.`,{provider:e.provider});return await i.appCatalog(e,r)}}}function S(e){if(e.length!==0)return{discover:async(t,n)=>{n.throwIfAborted();for(let r of e){if(!E(r,t.leaseProvider))continue;let e=await r.deviceInventoryProvider(t,n);if(n.throwIfAborted(),e!=null)return{kind:`inventory`,devices:e}}return{kind:`declined`}}}}function C(e){let t=new Set;for(let n of e){if(t.has(n.provider))throw TypeError(`Duplicate provider device runtime: ${n.provider}`);t.add(n.provider)}}async function w(e,t){for(let n of e){if(!E(n,t.provider))continue;let e=await n.cloudArtifacts?.listCloudArtifacts?.(t);if(e)return e}}async function T(e,t,n,r){for(let i of e){if(!E(i,n.leaseProvider))continue;let e=i.leaseLifecycle[t],a=e?await e(n,r):void 0;if(a)return a}}function E(e,t){return e.provider===t}var D=e({getInteractor:()=>O,getLocalInteractor:()=>k});i();async function O(e,r){if(u(e)){let i=l(e,r);if(i)return i;throw new t(`UNSUPPORTED_OPERATION`,`Provider device runtime does not have an active interactor for this device.`,{deviceId:e.id,platform:n(e)})}return await k(e,r)}async function k(e,t){return await r(e.platform).createInteractor(e,t)}export{u as i,D as n,f as r,O as t};
|
package/dist/src/internal/bin.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
async function e(e,n,r){try{await t(e,n,r)}catch(e){r.stderr(`${e instanceof Error?e.message:String(e)}\n`),await(await n.processExit()).exitAfterFlush(1)}}async function t(e,t,l){if(e.length===0)return await n(t,l);if(o(e))return await r(t,l);let u=c(e);if(u!==void 0)return await i(u,e,t,l);if(s(e))return await(await t.mcp()).runAgentDeviceMcpServer();await a(e,t)}async function n(e,t){t.stdout(`${(await e.help()).buildUsageText()}\n`),await(await e.processExit()).exitAfterFlush(1)}async function r(e,t){t.stdout(`${t.bundledVersion??(await e.version()).readVersion()}\n`)}async function i(e,t,n,r){let i=await n.help(),o=e===null?`${i.buildUsageText()}\n`:i.resolveHelpTargetUsageText(e);if(o===null)return await a(t,n);r.stdout(o)}async function a(e,t){await(await t.cli()).runCliProcess(e)}function o(e){return e.length===1&&(e[0]===`--version`||e[0]===`-V`)}function s(e){return e[0]===`mcp`&&!e.some(l)}function c(e){let[t,n]=e;if(e.length===1)return t===`help`||l(t)?null:void 0;if(e.length===2)return t===`help`?n:l(n)?t:void 0}function l(e){return e===`--help`||e===`-h`}e(process.argv.slice(2),{help:()=>import(`../cli-help.js`).then(e=>e.n),cli:()=>import(`../process-entry.js`),mcp:()=>import(`../server.js`),version:()=>import(`../version.js`).then(e=>e.t),processExit:()=>import(`../process-exit.js`)},{bundledVersion:`0.21.
|
|
1
|
+
async function e(e,n,r){try{await t(e,n,r)}catch(e){r.stderr(`${e instanceof Error?e.message:String(e)}\n`),await(await n.processExit()).exitAfterFlush(1)}}async function t(e,t,l){if(e.length===0)return await n(t,l);if(o(e))return await r(t,l);let u=c(e);if(u!==void 0)return await i(u,e,t,l);if(s(e))return await(await t.mcp()).runAgentDeviceMcpServer();await a(e,t)}async function n(e,t){t.stdout(`${(await e.help()).buildUsageText()}\n`),await(await e.processExit()).exitAfterFlush(1)}async function r(e,t){t.stdout(`${t.bundledVersion??(await e.version()).readVersion()}\n`)}async function i(e,t,n,r){let i=await n.help(),o=e===null?`${i.buildUsageText()}\n`:i.resolveHelpTargetUsageText(e);if(o===null)return await a(t,n);r.stdout(o)}async function a(e,t){await(await t.cli()).runCliProcess(e)}function o(e){return e.length===1&&(e[0]===`--version`||e[0]===`-V`)}function s(e){return e[0]===`mcp`&&!e.some(l)}function c(e){let[t,n]=e;if(e.length===1)return t===`help`||l(t)?null:void 0;if(e.length===2)return t===`help`?n:l(n)?t:void 0}function l(e){return e===`--help`||e===`-h`}e(process.argv.slice(2),{help:()=>import(`../cli-help.js`).then(e=>e.n),cli:()=>import(`../process-entry.js`),mcp:()=>import(`../server.js`),version:()=>import(`../version.js`).then(e=>e.t),processExit:()=>import(`../process-exit.js`)},{bundledVersion:`0.21.24`,stdout:e=>{process.stdout.write(e)},stderr:e=>{process.stderr.write(e)}}).catch(()=>process.exit(1));export{};
|