agent-device 0.21.13 → 0.21.15

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.
Files changed (298) hide show
  1. package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.13.apk → agent-device-android-ime-helper-0.21.15.apk} +0 -0
  2. package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.15.apk.sha256 +1 -0
  3. package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.13.manifest.json → agent-device-android-ime-helper-0.21.15.manifest.json} +4 -4
  4. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.15.apk +0 -0
  5. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.15.apk.sha256 +1 -0
  6. package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.21.13.manifest.json → agent-device-android-snapshot-helper-0.21.15.manifest.json} +6 -6
  7. package/apple/snapshot-bridge/SnapshotBridgeRuntime.m +11 -1
  8. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunner/AgentDeviceRunnerApp.m +110 -2
  9. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerAXSnapshotBridge.m +4 -2
  10. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerMainOwnedState.swift +27 -0
  11. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSynthesizedTextEntry.h +8 -2
  12. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSynthesizedTextEntry.m +26 -1
  13. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+AXSnapshotFallback.swift +12 -19
  14. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Alert.swift +59 -20
  15. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+AlertObservation.swift +2 -3
  16. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandDispatch.swift +179 -91
  17. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandExecution.swift +21 -24
  18. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandJournal.swift +1 -1
  19. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+GestureExecution.swift +9 -13
  20. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Lifecycle.swift +36 -49
  21. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+MainThreadWork.swift +11 -15
  22. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Models.swift +136 -29
  23. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Navigation.swift +20 -21
  24. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+PrivateAXPresentation.swift +3 -0
  25. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+ScreenRecorder.swift +6 -5
  26. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+ScrollDragExecution.swift +12 -24
  27. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SequenceExecution.swift +22 -42
  28. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Snapshot.swift +15 -18
  29. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotAcquisition.swift +73 -31
  30. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotCapturePlan.swift +20 -11
  31. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotCaptureTarget.swift +9 -7
  32. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotExecution.swift +5 -4
  33. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotTiming.swift +2 -2
  34. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedGesturePolicy.swift +51 -19
  35. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift +5 -2
  36. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedTextEntry.swift +78 -10
  37. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntry.swift +32 -2
  38. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryFocus.swift +7 -4
  39. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextTyping.swift +23 -0
  40. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Transport.swift +17 -10
  41. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TvRemote.swift +8 -9
  42. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TypeExecution.swift +9 -15
  43. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests.swift +12 -11
  44. package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotCoordinateSpace.swift +16 -19
  45. package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotGeometry.swift +24 -9
  46. package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotModels.swift +66 -10
  47. package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotPresentationInvariant.swift +12 -10
  48. package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotPresentationProjection.swift +1 -0
  49. package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotVisibilityFold.swift +27 -5
  50. package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotVisibilityFoldProjection.swift +1 -0
  51. package/dist/src/adapter.js +1 -1
  52. package/dist/src/adb-executor.js +1 -1
  53. package/dist/src/adb-failure.js +1 -1
  54. package/dist/src/adb-transport.js +1 -1
  55. package/dist/src/agent-browser-provider.js +1 -1
  56. package/dist/src/agent-browser-tool.js +1 -1
  57. package/dist/src/agent-device-client.js +2 -2
  58. package/dist/src/ai-sdk.js +1 -1
  59. package/dist/src/alert-runtime.js +1 -1
  60. package/dist/src/android-adb.d.ts +1 -8
  61. package/dist/src/android-input-ownership.js +1 -1
  62. package/dist/src/android-snapshot-quality.js +1 -0
  63. package/dist/src/android-system-chrome.js +1 -1
  64. package/dist/src/android.js +1 -1
  65. package/dist/src/app-catalog.js +1 -1
  66. package/dist/src/app-deployment-resolution.js +1 -1
  67. package/dist/src/app-inventory.js +1 -1
  68. package/dist/src/app-launch.js +1 -1
  69. package/dist/src/app-lifecycle.js +1 -1
  70. package/dist/src/app-lifecycle2.js +1 -1
  71. package/dist/src/app-log-files.js +1 -1
  72. package/dist/src/app-log-runtime2.js +1 -1
  73. package/dist/src/app-resolution.js +2 -2
  74. package/dist/src/apple-runner-platform.js +1 -1
  75. package/dist/src/application-lifecycle-interaction.js +1 -1
  76. package/dist/src/archive.js +1 -1
  77. package/dist/src/artifact-download.js +1 -1
  78. package/dist/src/auth-session.js +1 -1
  79. package/dist/src/auth.js +1 -1
  80. package/dist/src/backend-snapshot-options.js +1 -1
  81. package/dist/src/boot-diagnostics.js +1 -1
  82. package/dist/src/capture-disclosure.js +1 -1
  83. package/dist/src/capture.js +1 -1
  84. package/dist/src/cli-config.js +1 -1
  85. package/dist/src/cli-help.js +2 -2
  86. package/dist/src/cli.js +4 -4
  87. package/dist/src/click-button.js +1 -1
  88. package/dist/src/client-metro.js +1 -1
  89. package/dist/src/client-types.d.ts +102 -95
  90. package/dist/src/clipboard-shell-response.js +1 -1
  91. package/dist/src/command-schema.js +1 -1
  92. package/dist/src/command-tools.js +3 -3
  93. package/dist/src/connection-runtime.js +1 -1
  94. package/dist/src/connection.js +1 -1
  95. package/dist/src/contracts.d.ts +1 -1
  96. package/dist/src/contracts.js +1 -1
  97. package/dist/src/daemon-client-lifecycle.js +1 -1
  98. package/dist/src/daemon.js +1 -1
  99. package/dist/src/debug-symbols-facade.js +1 -1
  100. package/dist/src/device-claim-rule.js +2 -2
  101. package/dist/src/device-input-state.d.ts +15 -2
  102. package/dist/src/device-inventory-context.js +1 -1
  103. package/dist/src/device-rotation.js +1 -1
  104. package/dist/src/device-selection-resolver.js +1 -1
  105. package/dist/src/device-session.js +1 -1
  106. package/dist/src/device-shell.js +1 -1
  107. package/dist/src/device2.js +1 -1
  108. package/dist/src/devicectl.js +1 -1
  109. package/dist/src/diagnostics.js +1 -1
  110. package/dist/src/dispatch-resolve.js +1 -1
  111. package/dist/src/doctor2.js +1 -1
  112. package/dist/src/engine-eval-script.js +1 -1
  113. package/dist/src/error.js +1 -1
  114. package/dist/src/exec.js +1 -1
  115. package/dist/src/file.js +1 -1
  116. package/dist/src/find.js +1 -1
  117. package/dist/src/format.js +1 -1
  118. package/dist/src/gesture-plan-types.d.ts +1 -1
  119. package/dist/src/gesture-plan.js +1 -1
  120. package/dist/src/gesture-runtime.js +1 -1
  121. package/dist/src/harmonyos.js +1 -1
  122. package/dist/src/helper.js +2 -2
  123. package/dist/src/human-control-contract.js +1 -1
  124. package/dist/src/human-control.js +1 -1
  125. package/dist/src/index.d.ts +7 -3
  126. package/dist/src/index.js +1 -1
  127. package/dist/src/input-actions.js +1 -1
  128. package/dist/src/input-actions2.js +1 -1
  129. package/dist/src/install-artifact-facade.js +1 -1
  130. package/dist/src/install-source-network-transport.js +1 -1
  131. package/dist/src/install-source2.js +1 -1
  132. package/dist/src/interaction-positionals.js +1 -1
  133. package/dist/src/interaction-ref-policy.js +1 -1
  134. package/dist/src/interaction2.js +1 -1
  135. package/dist/src/interactor-operation-binding.js +1 -1
  136. package/dist/src/interactor.js +4 -4
  137. package/dist/src/interactor2.js +1 -1
  138. package/dist/src/interactors.js +1 -1
  139. package/dist/src/internal/bin.js +1 -1
  140. package/dist/src/internal/daemon.js +2 -2
  141. package/dist/src/internal/png-worker.js +1 -1
  142. package/dist/src/internal/run-script-http-child.js +1 -1
  143. package/dist/src/inventory.js +1 -1
  144. package/dist/src/inventory2.js +1 -1
  145. package/dist/src/inventory3.js +1 -1
  146. package/dist/src/inventory5.js +1 -1
  147. package/dist/src/ios-snapshot-acquisition.js +1 -1
  148. package/dist/src/ios-snapshot-engine.js +1 -0
  149. package/dist/src/ios-snapshot-runtime.js +1 -1
  150. package/dist/src/lease.js +1 -1
  151. package/dist/src/limrun-download-file.js +1 -1
  152. package/dist/src/limrun-runtime-dependencies.js +1 -1
  153. package/dist/src/limrun.d.ts +16 -3
  154. package/dist/src/linux.js +1 -1
  155. package/dist/src/location-coordinates.js +1 -1
  156. package/dist/src/managed-device-scope.js +1 -1
  157. package/dist/src/mechanics.js +17 -17
  158. package/dist/src/mobile-snapshot-semantics.js +1 -1
  159. package/dist/src/multitouch-support.js +1 -1
  160. package/dist/src/native-build-cache.js +1 -0
  161. package/dist/src/observation.js +1 -1
  162. package/dist/src/overlay.js +3 -0
  163. package/dist/src/parameterized-recorded-fill.js +1 -1
  164. package/dist/src/perf-facade.js +1 -1
  165. package/dist/src/perf-runtime-operation-builder.js +1 -1
  166. package/dist/src/perf-runtime-plan.js +1 -1
  167. package/dist/src/perf-target.js +2 -2
  168. package/dist/src/perf.js +1 -1
  169. package/dist/src/physical-device-control.js +1 -1
  170. package/dist/src/platform-runtime-host.js +1 -1
  171. package/dist/src/platform-runtime-managed-owner.js +1 -1
  172. package/dist/src/platform-runtime-open-target.js +1 -1
  173. package/dist/src/platform-runtime-operation-host.js +4 -4
  174. package/dist/src/platform-runtime-runtime-hints.js +1 -1
  175. package/dist/src/platform-runtime-screen-recording-apple-simulator-host.js +1 -1
  176. package/dist/src/platform-runtime-screen-recording-finalizer-host.js +1 -1
  177. package/dist/src/platform-runtime-screen-recording-process-host.js +1 -1
  178. package/dist/src/platform-runtime.js +1 -1
  179. package/dist/src/platform-runtime2.js +1 -1
  180. package/dist/src/png-crop-bytes.js +1 -1
  181. package/dist/src/png-size.js +1 -1
  182. package/dist/src/png-worker-client.js +1 -1
  183. package/dist/src/png.js +1 -1
  184. package/dist/src/prepare-kind.js +1 -1
  185. package/dist/src/provider-session-ownership.js +1 -1
  186. package/dist/src/provider-webdriver.js +1 -1
  187. package/dist/src/proxy.js +1 -1
  188. package/dist/src/quality-warnings.js +1 -1
  189. package/dist/src/react-native.js +1 -1
  190. package/dist/src/record-runtime.js +1 -1
  191. package/dist/src/recording.js +1 -1
  192. package/dist/src/rect-center.js +1 -1
  193. package/dist/src/register-builtins.js +1 -1
  194. package/dist/src/registry.js +36 -36
  195. package/dist/src/remote-config2.js +1 -1
  196. package/dist/src/replay-divergence.js +1 -1
  197. package/dist/src/replay.js +1 -1
  198. package/dist/src/reporting.js +1 -1
  199. package/dist/src/request-admission.js +1 -1
  200. package/dist/src/request-cancel.js +1 -1
  201. package/dist/src/request-runtime-binding.js +1 -1
  202. package/dist/src/retry.js +1 -1
  203. package/dist/src/runner-cache-metadata.js +1 -1
  204. package/dist/src/runner-client.js +1 -1
  205. package/dist/src/runner-dev-tools-security.js +1 -1
  206. package/dist/src/runner-device-readiness.js +1 -1
  207. package/dist/src/runner-disposal.js +1 -1
  208. package/dist/src/runner-error-classification.js +1 -1
  209. package/dist/src/runner.js +1 -1
  210. package/dist/src/runtime-transport-hints.js +1 -1
  211. package/dist/src/runtime.js +1 -3
  212. package/dist/src/runtime10.js +2 -2
  213. package/dist/src/runtime2.js +4 -4
  214. package/dist/src/runtime3.js +1 -1
  215. package/dist/src/runtime4.js +5 -5
  216. package/dist/src/runtime5.js +1 -1
  217. package/dist/src/runtime6.js +1 -1
  218. package/dist/src/runtime7.js +1 -1
  219. package/dist/src/runtime8.js +1 -1
  220. package/dist/src/runtime9.js +1 -1
  221. package/dist/src/screen-recording-admission-ledger.js +1 -1
  222. package/dist/src/screen-recording-completion.js +1 -1
  223. package/dist/src/screen-recording-options.js +1 -1
  224. package/dist/src/screen-recording-resource-recovery.js +1 -1
  225. package/dist/src/screenshot-density.js +1 -1
  226. package/dist/src/screenshot-image.js +1 -1
  227. package/dist/src/screenshot-overlay-draw.js +1 -1
  228. package/dist/src/screenshot-runtime.js +1 -1
  229. package/dist/src/screenshot.js +1 -1
  230. package/dist/src/screenshot3.js +1 -1
  231. package/dist/src/script.js +1 -1
  232. package/dist/src/scroll-command.d.ts +13 -6
  233. package/dist/src/scroll-command.js +1 -1
  234. package/dist/src/scroll-gesture.js +1 -1
  235. package/dist/src/sdk-batch-runner.js +2 -2
  236. package/dist/src/sdk-batch.js +2 -2
  237. package/dist/src/sdk-contracts.d.ts +59 -12
  238. package/dist/src/sdk-contracts.js +2 -2
  239. package/dist/src/sdk-device.js +1 -1
  240. package/dist/src/sdk-finders.d.ts +1 -1
  241. package/dist/src/sdk-io.js +1 -1
  242. package/dist/src/sdk-remote-config.js +1 -1
  243. package/dist/src/sdk-selectors.d.ts +1 -1
  244. package/dist/src/selection.js +0 -0
  245. package/dist/src/selector-runtime.js +1 -1
  246. package/dist/src/server.js +1 -1
  247. package/dist/src/session-allocation.js +1 -1
  248. package/dist/src/session-routing.js +1 -1
  249. package/dist/src/session-runtime-admission.js +1 -1
  250. package/dist/src/session-snapshot.js +1 -1
  251. package/dist/src/session-store.js +1 -1
  252. package/dist/src/session.js +1 -1
  253. package/dist/src/session2.js +4 -4
  254. package/dist/src/settings.js +1 -1
  255. package/dist/src/settings2.js +1 -0
  256. package/dist/src/simctl.js +1 -1
  257. package/dist/src/simulator-state.js +1 -1
  258. package/dist/src/simulator.js +1 -1
  259. package/dist/src/snapshot-capture-annotations.js +1 -1
  260. package/dist/src/snapshot-desktop-projection.js +1 -1
  261. package/dist/src/snapshot-runtime-binding.js +1 -1
  262. package/dist/src/snapshot-runtime.js +1 -1
  263. package/dist/src/snapshot-state.js +1 -1
  264. package/dist/src/snapshot2.js +1 -1
  265. package/dist/src/snapshot3.js +1 -1
  266. package/dist/src/snapshot4.js +1 -1
  267. package/dist/src/src.js +1 -1
  268. package/dist/src/src4.js +1 -1
  269. package/dist/src/src7.js +1 -1
  270. package/dist/src/src8.js +1 -1
  271. package/dist/src/string-enum.js +1 -1
  272. package/dist/src/surface-snapshot.js +1 -1
  273. package/dist/src/takeover.js +1 -1
  274. package/dist/src/text-entry-focus.js +1 -1
  275. package/dist/src/tool-provider-facade.js +1 -1
  276. package/dist/src/tool-provider.js +2 -2
  277. package/dist/src/tool-provider2.js +1 -1
  278. package/dist/src/touch-runtime.js +1 -1
  279. package/dist/src/transport.js +1 -1
  280. package/dist/src/tree.js +1 -1
  281. package/dist/src/tv-remote.js +1 -1
  282. package/dist/src/type-text-runtime.js +1 -1
  283. package/dist/src/verified-file.js +1 -1
  284. package/dist/src/video.js +1 -1
  285. package/dist/src/viewport.js +1 -1
  286. package/dist/src/web.js +1 -1
  287. package/dist/src/web2.js +1 -1
  288. package/dist/src/webdriver-source.js +1 -1
  289. package/package.json +1 -1
  290. package/server.json +2 -2
  291. package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.13.apk.sha256 +0 -1
  292. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.13.apk +0 -0
  293. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.13.apk.sha256 +0 -1
  294. package/dist/src/absence-observation-errors.js +0 -1
  295. package/dist/src/runner-presentation.js +0 -1
  296. package/dist/src/semantic-index.js +0 -1
  297. package/dist/src/snapshot-process.js +0 -1
  298. package/dist/src/snapshot-scope.js +0 -1
@@ -1,2 +1,2 @@
1
- import{D as e}from"./sdk-contracts.js";import{t}from"./scroll-gesture.js";import{c as n}from"./owner-identity.js";import{t as r}from"./timeouts.js";import"./retry.js";import"./process.js";import{t as i}from"./tool-provider2.js";function a(){let e=n();return e.WAYLAND_DISPLAY||e.XDG_SESSION_TYPE===`wayland`?`wayland`:`x11`}let o=null;async function s(){let t=i();if(o?.provider===t)return o;let n=a();if(n===`wayland`){if(await t.whichCommand(`ydotool`))return o={tool:`ydotool`,display:n,provider:t},o;throw new e(`TOOL_MISSING`,`ydotool is required for input synthesis on Wayland (xdotool does not work on Wayland). Install it via your package manager.`)}if(await t.whichCommand(`xdotool`))return o={tool:`xdotool`,display:n,provider:t},o;throw new e(`TOOL_MISSING`,`xdotool is required for input synthesis on X11. Install it via your package manager.`)}const c=1e4;async function l(...e){await i().runCommand(`xdotool`,e,{allowFailure:!1,timeoutMs:c})}async function u(...e){await i().runCommand(`ydotool`,e,{allowFailure:!1,timeoutMs:c})}function d(){return i().input}async function f(e,t){let{tool:n}=await s();if(n===`xdotool`){if(await p(e,t))return;await l(`mousemove`,`--sync`,String(e),String(t))}else await u(`mousemove`,`--absolute`,`-x`,String(e),`-y`,String(t))}async function p(e,t){try{let n=await i().runCommand(`xdotool`,[`getmouselocation`,`--shell`],{allowFailure:!0,timeoutMs:c}),r=new Map(n.stdout.split(`
1
+ import{A as e}from"./sdk-contracts.js";import{t}from"./scroll-gesture.js";import{c as n}from"./owner-identity.js";import{t as r}from"./timeouts.js";import"./retry.js";import"./process.js";import{t as i}from"./tool-provider2.js";function a(){let e=n();return e.WAYLAND_DISPLAY||e.XDG_SESSION_TYPE===`wayland`?`wayland`:`x11`}let o=null;async function s(){let t=i();if(o?.provider===t)return o;let n=a();if(n===`wayland`){if(await t.whichCommand(`ydotool`))return o={tool:`ydotool`,display:n,provider:t},o;throw new e(`TOOL_MISSING`,`ydotool is required for input synthesis on Wayland (xdotool does not work on Wayland). Install it via your package manager.`)}if(await t.whichCommand(`xdotool`))return o={tool:`xdotool`,display:n,provider:t},o;throw new e(`TOOL_MISSING`,`xdotool is required for input synthesis on X11. Install it via your package manager.`)}const c=1e4;async function l(...e){await i().runCommand(`xdotool`,e,{allowFailure:!1,timeoutMs:c})}async function u(...e){await i().runCommand(`ydotool`,e,{allowFailure:!1,timeoutMs:c})}function d(){return i().input}async function f(e,t){let{tool:n}=await s();if(n===`xdotool`){if(await p(e,t))return;await l(`mousemove`,`--sync`,String(e),String(t))}else await u(`mousemove`,`--absolute`,`-x`,String(e),`-y`,String(t))}async function p(e,t){try{let n=await i().runCommand(`xdotool`,[`getmouselocation`,`--shell`],{allowFailure:!0,timeoutMs:c}),r=new Map(n.stdout.split(`
2
2
  `).map(e=>e.trim().split(`=`)).filter(e=>e.length===2).map(([e,t])=>[e,Number(t)]));return r.get(`X`)===Math.round(e)&&r.get(`Y`)===Math.round(t)}catch{return!1}}async function m(e,t){let n=d();if(n){await n.key(e,t);return}let{tool:r}=await s();r===`xdotool`?await l(`key`,`--clearmodifiers`,e):await u(`key`,...t)}async function h(e,t,n,r){await f(e,t);let{tool:i}=await s();i===`xdotool`?await l(`click`,n):await u(`click`,r)}async function g(e,t,n,r,i){let a=d();if(a){await a.click(e,t,n);return}await h(e,t,r,i)}async function _(e,t){await g(e,t,`primary`,`1`,`0xC0`)}async function v(e,t){await g(e,t,`secondary`,`3`,`0xC1`)}async function y(e,t){await g(e,t,`middle`,`2`,`0xC2`)}async function b(e,t){let n=d();if(n){await n.doubleClick(e,t);return}let{tool:r}=await s();await f(e,t),r===`xdotool`?await l(`click`,`--repeat`,`2`,`1`):(await u(`click`,`0xC0`),await u(`click`,`0xC0`))}async function x(e,t,n=800){let i=d();if(i){await i.longPress(e,t,n);return}let{tool:a}=await s();await f(e,t),a===`xdotool`?(await l(`mousedown`,`1`),await r(n),await l(`mouseup`,`1`)):(await u(`click`,`--down`,`0xC0`),await r(n),await u(`click`,`--up`,`0xC0`))}async function S(e,t){await _(e,t)}async function C(e,t,n,i,a=300){let o=d();if(o){await o.drag(e,t,n,i,a);return}let{tool:c}=await s();await f(e,t),c===`xdotool`?(await l(`mousedown`,`1`),await l(`mousemove`,`--sync`,String(n),String(i)),await r(a),await l(`mouseup`,`1`)):(await u(`click`,`--down`,`0xC0`),await u(`mousemove`,`--absolute`,`-x`,String(n),`-y`,String(i)),await r(a),await u(`click`,`--up`,`0xC0`))}async function w(e,n){let r=d();if(r)return await r.scroll(e,n),E(n);let{tool:i}=await s(),a=5;if(n?.pixels==null?n?.amount!=null&&(a=Math.max(1,Math.round(5*(n.amount/t)))):a=i===`xdotool`?Math.max(1,Math.round(n.pixels/15)):Math.max(1,Math.round(n.pixels/40)),i===`xdotool`){let t=e===`up`?`4`:e===`down`?`5`:e===`left`?`6`:`7`;await T(a,n?.durationMs,async e=>{await l(`click`,`--repeat`,String(e),t)})}else e===`up`||e===`down`?await T(a,n?.durationMs,async t=>{await u(`mousemove`,`--wheel`,`-y`,String(e===`up`?-t:t))}):await T(a,n?.durationMs,async t=>{await u(`mousemove`,`--wheel`,`-x`,String(e===`left`?-t:t))});return E(n)}async function T(e,t,n){if(t===void 0||t<=0||e<=1){await n(e);return}let i=t/Math.max(1,e-1);for(let t=0;t<e;t+=1)await n(1),t<e-1&&await r(i)}function E(e){return e?.durationMs===void 0?{}:{durationMs:e.durationMs}}async function D(e,t=0){let n=d();if(n){await n.typeText(e,{delayMs:t});return}let{tool:r}=await s();if(r===`xdotool`){let n=[`type`];t>0&&n.push(`--delay`,String(t)),n.push(`--clearmodifiers`,`--`,e),await l(...n)}else await u(`type`,`--`,e)}async function O(e,t,n,i=0){if(await _(e,t),await r(100),await m(`ctrl+a`,[`29:1`,`30:1`,`30:0`,`29:0`]),await r(50),n.length===0){await m(`BackSpace`,[`14:1`,`14:0`]);return}await D(n,i)}export{b as doubleClickLinux,O as fillLinux,S as focusLinux,x as longPressLinux,y as middleClickLinux,_ as pressLinux,v as rightClickLinux,w as scrollLinux,m as sendKey,C as swipeLinux,D as typeLinux};
@@ -1 +1 @@
1
- import{D as e}from"./sdk-contracts.js";import{r as t}from"./archive.js";import{a as n,c as r,n as i,o as a,r as o,s}from"./install-source2.js";import{C as c,g as l,m as u}from"./host-file.js";import{t as d}from"./plist.js";import f from"node:path";async function p(e,t){let n=f.join(e,`Info.plist`),[r,i,a]=await Promise.all([d(n,`CFBundleIdentifier`,t),d(n,`CFBundleDisplayName`,t),d(n,`CFBundleName`,t)]);return{bundleId:r,appName:i??a}}async function m(e,t){return await r(async()=>await h(e,t))}async function h(t,n){if(t.kind===`url`&&!i(t.url))throw new e(`INVALID_ARGS`,`iOS install_from_source URL sources are only supported for trusted artifact services such as GitHub Actions and EAS. Use a path source for other hosts.`);let r=await o({source:t,isInstallablePath:(e,t)=>t.isDirectory()&&e.toLowerCase().endsWith(`.app`)||t.isFile()&&e.toLowerCase().endsWith(`.ipa`),installableLabel:`iOS installable (.app or .ipa)`,allowArchiveExtraction:t.kind!==`url`||i(t.url),signal:n?.signal}),a;try{a=await g(r.installablePath,n);let e=a,t=await p(e.installPath,n?.signal);return{archivePath:r.archivePath??(r.installablePath.toLowerCase().endsWith(`.ipa`)?r.installablePath:void 0),installablePath:e.installPath,bundleId:t.bundleId,appName:t.appName,cleanup:async()=>{await e.cleanup(),await r.cleanup()}}}catch(e){try{await a?.cleanup()}finally{await r.cleanup()}throw e}}async function g(e,t){return e.toLowerCase().endsWith(`.ipa`)?await _(e,t):{installPath:e,cleanup:async()=>{}}}async function _(r,i){let o=await u(`agent-device-ios-ipa-`),d=async()=>{await c(o)};try{let c=f.join(o,`extracted`),u=a()+1,p=n();await t({archivePath:r,outputRoot:c,type:`zip`,budget:p,depth:u,signal:i?.signal}),s(u);let m=f.join(c,`Payload`),h=(await l(m,{withFileTypes:!0}).catch(()=>{throw new e(`INVALID_ARGS`,`Invalid IPA: missing Payload directory`)})).filter(e=>e.isDirectory()&&e.name.toLowerCase().endsWith(`.app`)).map(e=>({installPath:f.join(m,e.name),bundleName:e.name.replace(/\.app$/i,``)})),g=h[0];if(g!==void 0&&h.length===1)return{installPath:g.installPath,cleanup:d};if(h.length===0)throw new e(`INVALID_ARGS`,`Invalid IPA: expected at least one .app under Payload, found 0`);await v(h,i?.signal);let _=i?.appIdentifierHint?.trim();if(_){let t=y(h,_);if(t)return{installPath:t.installPath,cleanup:d};throw new e(`INVALID_ARGS`,`Invalid IPA: found ${h.length} .app bundles under Payload and none matched "${_}". Available bundles: ${h.map(b).join(`, `)}`)}throw new e(`INVALID_ARGS`,`Invalid IPA: found ${h.length} .app bundles under Payload. Pass an app identifier or bundle name matching one of: ${h.map(b).join(`, `)}`)}catch(e){throw await d(),e}}async function v(e,t){await Promise.all(e.map(async e=>{if(e.bundleId&&e.appName)return;let n=await p(e.installPath,t);e.bundleId=e.bundleId??n.bundleId,e.appName=e.appName??n.appName}))}function y(t,n){let r=n.toLowerCase(),i=t.filter(e=>e.bundleName.toLowerCase()===r);if(i.length===1)return i[0];if(i.length>1)throw new e(`INVALID_ARGS`,`Invalid IPA: multiple app bundles matched "${n}" by name. Use a bundle id hint instead.`);if(n.includes(`.`)){let e=t.filter(e=>e.bundleId?.toLowerCase()===r);if(e.length===1)return e[0]}}function b(e){let t=e.bundleId??e.appName;return t?`${e.bundleName}.app (${t})`:`${e.bundleName}.app`}export{m as prepareIosInstallArtifact,p as readIosBundleInfo};
1
+ import{A as e}from"./sdk-contracts.js";import{r as t}from"./archive.js";import{a as n,c as r,n as i,o as a,r as o,s}from"./install-source2.js";import{C as c,g as l,m as u}from"./host-file.js";import{t as d}from"./plist.js";import f from"node:path";async function p(e,t){let n=f.join(e,`Info.plist`),[r,i,a]=await Promise.all([d(n,`CFBundleIdentifier`,t),d(n,`CFBundleDisplayName`,t),d(n,`CFBundleName`,t)]);return{bundleId:r,appName:i??a}}async function m(e,t){return await r(async()=>await h(e,t))}async function h(t,n){if(t.kind===`url`&&!i(t.url))throw new e(`INVALID_ARGS`,`iOS install_from_source URL sources are only supported for trusted artifact services such as GitHub Actions and EAS. Use a path source for other hosts.`);let r=await o({source:t,isInstallablePath:(e,t)=>t.isDirectory()&&e.toLowerCase().endsWith(`.app`)||t.isFile()&&e.toLowerCase().endsWith(`.ipa`),installableLabel:`iOS installable (.app or .ipa)`,allowArchiveExtraction:t.kind!==`url`||i(t.url),signal:n?.signal}),a;try{a=await g(r.installablePath,n);let e=a,t=await p(e.installPath,n?.signal);return{archivePath:r.archivePath??(r.installablePath.toLowerCase().endsWith(`.ipa`)?r.installablePath:void 0),installablePath:e.installPath,bundleId:t.bundleId,appName:t.appName,cleanup:async()=>{await e.cleanup(),await r.cleanup()}}}catch(e){try{await a?.cleanup()}finally{await r.cleanup()}throw e}}async function g(e,t){return e.toLowerCase().endsWith(`.ipa`)?await _(e,t):{installPath:e,cleanup:async()=>{}}}async function _(r,i){let o=await u(`agent-device-ios-ipa-`),d=async()=>{await c(o)};try{let c=f.join(o,`extracted`),u=a()+1,p=n();await t({archivePath:r,outputRoot:c,type:`zip`,budget:p,depth:u,signal:i?.signal}),s(u);let m=f.join(c,`Payload`),h=(await l(m,{withFileTypes:!0}).catch(()=>{throw new e(`INVALID_ARGS`,`Invalid IPA: missing Payload directory`)})).filter(e=>e.isDirectory()&&e.name.toLowerCase().endsWith(`.app`)).map(e=>({installPath:f.join(m,e.name),bundleName:e.name.replace(/\.app$/i,``)})),g=h[0];if(g!==void 0&&h.length===1)return{installPath:g.installPath,cleanup:d};if(h.length===0)throw new e(`INVALID_ARGS`,`Invalid IPA: expected at least one .app under Payload, found 0`);await v(h,i?.signal);let _=i?.appIdentifierHint?.trim();if(_){let t=y(h,_);if(t)return{installPath:t.installPath,cleanup:d};throw new e(`INVALID_ARGS`,`Invalid IPA: found ${h.length} .app bundles under Payload and none matched "${_}". Available bundles: ${h.map(b).join(`, `)}`)}throw new e(`INVALID_ARGS`,`Invalid IPA: found ${h.length} .app bundles under Payload. Pass an app identifier or bundle name matching one of: ${h.map(b).join(`, `)}`)}catch(e){throw await d(),e}}async function v(e,t){await Promise.all(e.map(async e=>{if(e.bundleId&&e.appName)return;let n=await p(e.installPath,t);e.bundleId=e.bundleId??n.bundleId,e.appName=e.appName??n.appName}))}function y(t,n){let r=n.toLowerCase(),i=t.filter(e=>e.bundleName.toLowerCase()===r);if(i.length===1)return i[0];if(i.length>1)throw new e(`INVALID_ARGS`,`Invalid IPA: multiple app bundles matched "${n}" by name. Use a bundle id hint instead.`);if(n.includes(`.`)){let e=t.filter(e=>e.bundleId?.toLowerCase()===r);if(e.length===1)return e[0]}}function b(e){let t=e.bundleId??e.appName;return t?`${e.bundleName}.app (${t})`:`${e.bundleName}.app`}export{m as prepareIosInstallArtifact,p as readIosBundleInfo};
@@ -1 +1 @@
1
- import{a as e,t}from"./rolldown-runtime.js";import{D as n,F as r,k as i}from"./sdk-contracts.js";import{t as a}from"./undici.js";import o from"node:net";import s from"node:dns/promises";var c=e(t(((e,t)=>{(function(e){let n=`(0?\\d+|0x[a-f0-9]+)`,r={fourOctet:RegExp(`^${n}\\.${n}\\.${n}\\.${n}$`,`i`),threeOctet:RegExp(`^${n}\\.${n}\\.${n}$`,`i`),twoOctet:RegExp(`^${n}\\.${n}$`,`i`),longValue:RegExp(`^${n}$`,`i`)},i=RegExp(`^0[0-7]+$`,`i`),a=RegExp(`^0x[a-f0-9]+$`,`i`),o=`%[0-9a-z]{1,}`,s=`(?:[0-9a-f]+::?)+`,c={zoneIndex:RegExp(o,`i`),native:RegExp(`^(::)?(${s})?([0-9a-f]+)?(::)?(${o})?$`,`i`),deprecatedTransitional:RegExp(`^(?:::)(${n}\\.${n}\\.${n}\\.${n}(${o})?)$`,`i`),transitional:RegExp(`^((?:${s})|(?:::)(?:${s})?)${n}\\.${n}\\.${n}\\.${n}(${o})?$`,`i`)};function l(e,t){if(e.indexOf(`::`)!==e.lastIndexOf(`::`))return null;let n=0,r=-1,i=(e.match(c.zoneIndex)||[])[0],a,o;for(i&&(i=i.substring(1),e=e.replace(/%.+$/,``));(r=e.indexOf(`:`,r+1))>=0;)n++;if(e.substr(0,2)===`::`&&n--,e.substr(-2,2)===`::`&&n--,n>=t)return null;for(o=t-n,a=`:`;o--;)a+=`0:`;return e=e.replace(`::`,a),e[0]===`:`&&(e=e.slice(1)),e[e.length-1]===`:`&&(e=e.slice(0,-1)),t=(function(){let t=e.split(`:`),n=[];for(let e=0;e<t.length;e++)n.push(t[e].length>4?NaN:parseInt(t[e],16));return n})(),{parts:t,zoneId:i}}function u(e,t,n,r){if(e.length!==t.length)throw Error(`ipaddr: cannot match CIDR for objects with different lengths`);let i=0,a;for(;r>0;){if(a=n-r,a<0&&(a=0),e[i]>>a!==t[i]>>a)return!1;r-=n,i+=1}return!0}function d(e){if(a.test(e))return parseInt(e,16);if(e[0]===`0`&&!isNaN(parseInt(e[1],10))){if(i.test(e))return parseInt(e,8);throw Error(`ipaddr: cannot parse ${e} as octal`)}return parseInt(e,10)}function f(e,t){for(;e.length<t;)e=`0${e}`;return e}let p={};p.IPv4=(function(){function e(e){if(e.length!==4)throw Error(`ipaddr: ipv4 octet count should be 4`);let t,n;for(t=0;t<e.length;t++)if(n=e[t],!(0<=n&&n<=255))throw Error(`ipaddr: ipv4 octet should fit in 8 bits`);this.octets=e}return e.prototype.SpecialRanges={unspecified:[[new e([0,0,0,0]),8]],broadcast:[[new e([255,255,255,255]),32]],multicast:[[new e([224,0,0,0]),4]],linkLocal:[[new e([169,254,0,0]),16]],loopback:[[new e([127,0,0,0]),8]],carrierGradeNat:[[new e([100,64,0,0]),10]],private:[[new e([10,0,0,0]),8],[new e([172,16,0,0]),12],[new e([192,168,0,0]),16]],reserved:[[new e([192,0,0,0]),24],[new e([192,0,2,0]),24],[new e([192,88,99,0]),24],[new e([198,18,0,0]),15],[new e([198,51,100,0]),24],[new e([203,0,113,0]),24],[new e([240,0,0,0]),4]],as112:[[new e([192,175,48,0]),24],[new e([192,31,196,0]),24]],amt:[[new e([192,52,193,0]),24]]},e.prototype.kind=function(){return`ipv4`},e.prototype.match=function(e,t){let n;if(t===void 0&&(n=e,e=n[0],t=n[1]),e.kind()!==`ipv4`)throw Error(`ipaddr: cannot match ipv4 address with non-ipv4 one`);return u(this.octets,e.octets,8,t)},e.prototype.prefixLengthFromSubnetMask=function(){let e=0,t=!1,n={0:8,128:7,192:6,224:5,240:4,248:3,252:2,254:1,255:0},r,i,a;for(r=3;r>=0;--r)if(i=this.octets[r],i in n){if(a=n[i],t&&a!==0)return null;a!==8&&(t=!0),e+=a}else return null;return 32-e},e.prototype.range=function(){return p.subnetMatch(this,this.SpecialRanges)},e.prototype.toByteArray=function(){return this.octets.slice(0)},e.prototype.toIPv4MappedAddress=function(){return p.IPv6.parse(`::ffff:${this.toString()}`)},e.prototype.toNormalizedString=function(){return this.toString()},e.prototype.toString=function(){return this.octets.join(`.`)},e})(),p.IPv4.broadcastAddressFromCIDR=function(e){try{let t=this.parseCIDR(e),n=t[0].toByteArray(),r=this.subnetMaskFromPrefixLength(t[1]).toByteArray(),i=[],a=0;for(;a<4;)i.push(parseInt(n[a],10)|parseInt(r[a],10)^255),a++;return new this(i)}catch(e){throw Error(`ipaddr: the address does not have IPv4 CIDR format`,{cause:e})}},p.IPv4.isIPv4=function(e){return this.parser(e)!==null},p.IPv4.isValid=function(e){try{return new this(this.parser(e)),!0}catch{return!1}},p.IPv4.isValidCIDR=function(e){try{return this.parseCIDR(e),!0}catch{return!1}},p.IPv4.isValidFourPartDecimal=function(e){return!!(p.IPv4.isValid(e)&&e.match(/^(0|[1-9]\d*)(\.(0|[1-9]\d*)){3}$/))},p.IPv4.isValidCIDRFourPartDecimal=function(e){let t=e.match(/^(.+)\/(\d+)$/);return!p.IPv4.isValidCIDR(e)||!t?!1:p.IPv4.isValidFourPartDecimal(t[1])},p.IPv4.networkAddressFromCIDR=function(e){let t,n,r,i,a;try{for(t=this.parseCIDR(e),r=t[0].toByteArray(),a=this.subnetMaskFromPrefixLength(t[1]).toByteArray(),i=[],n=0;n<4;)i.push(parseInt(r[n],10)&parseInt(a[n],10)),n++;return new this(i)}catch(e){throw Error(`ipaddr: the address does not have IPv4 CIDR format`,{cause:e})}},p.IPv4.parse=function(e){let t=this.parser(e);if(t===null)throw Error(`ipaddr: string is not formatted like an IPv4 Address`);return new this(t)},p.IPv4.parseCIDR=function(e){let t;if(t=e.match(/^(.+)\/(\d+)$/)){let e=parseInt(t[2]);if(e>=0&&e<=32){let n=[this.parse(t[1]),e];return Object.defineProperty(n,"toString",{value:function(){return this.join(`/`)}}),n}}throw Error(`ipaddr: string is not formatted like an IPv4 CIDR range`)},p.IPv4.parser=function(e){let t,n,i;if(t=e.match(r.fourOctet))return(function(){let e=t.slice(1,6),r=[];for(let t=0;t<e.length;t++)n=e[t],r.push(d(n));return r})();if(t=e.match(r.longValue)){if(i=d(t[1]),i>4294967295||i<0)throw Error(`ipaddr: address outside defined range`);return(function(){let e=[],t;for(t=0;t<=24;t+=8)e.push(i>>t&255);return e})().reverse()}return(t=e.match(r.twoOctet))?(function(){let e=t.slice(1,4),n=[];if(i=d(e[1]),i>16777215||i<0)throw Error(`ipaddr: address outside defined range`);return n.push(d(e[0])),n.push(i>>16&255),n.push(i>>8&255),n.push(i&255),n})():(t=e.match(r.threeOctet))?(function(){let e=t.slice(1,5),n=[];if(i=d(e[2]),i>65535||i<0)throw Error(`ipaddr: address outside defined range`);return n.push(d(e[0])),n.push(d(e[1])),n.push(i>>8&255),n.push(i&255),n})():null},p.IPv4.subnetMaskFromPrefixLength=function(e){if(e=parseInt(e),Number.isNaN(e)||e<0||e>32)throw Error(`ipaddr: invalid IPv4 prefix length`);let t=[0,0,0,0],n=0,r=Math.floor(e/8);for(;n<r;)t[n]=255,n++;return r<4&&(t[r]=2**(e%8)-1<<8-e%8),new this(t)},p.IPv6=(function(){function e(e,t){let n,r;if(e.length===16)for(this.parts=[],n=0;n<=14;n+=2)this.parts.push(e[n]<<8|e[n+1]);else if(e.length===8)this.parts=e;else throw Error(`ipaddr: ipv6 part count should be 8 or 16`);for(n=0;n<this.parts.length;n++)if(r=this.parts[n],!(0<=r&&r<=65535))throw Error(`ipaddr: ipv6 part should fit in 16 bits`);t&&(this.zoneId=t)}return e.prototype.SpecialRanges={unspecified:[new e([0,0,0,0,0,0,0,0]),128],linkLocal:[new e([65152,0,0,0,0,0,0,0]),10],multicast:[new e([65280,0,0,0,0,0,0,0]),8],loopback:[new e([0,0,0,0,0,0,0,1]),128],uniqueLocal:[new e([64512,0,0,0,0,0,0,0]),7],ipv4Mapped:[new e([0,0,0,0,0,65535,0,0]),96],deprecatedSiteLocal:[new e([65216,0,0,0,0,0,0,0]),10],discard:[new e([256,0,0,0,0,0,0,0]),64],rfc6145:[new e([0,0,0,0,65535,0,0,0]),96],rfc6052:[[new e([100,65435,0,0,0,0,0,0]),96],[new e([100,65435,1,0,0,0,0,0]),48]],"6to4":[new e([8194,0,0,0,0,0,0,0]),16],teredo:[new e([8193,0,0,0,0,0,0,0]),32],benchmarking:[new e([8193,2,0,0,0,0,0,0]),48],amt:[new e([8193,3,0,0,0,0,0,0]),32],as112v6:[[new e([8193,4,274,0,0,0,0,0]),48],[new e([9760,79,32768,0,0,0,0,0]),48]],deprecatedOrchid:[new e([8193,16,0,0,0,0,0,0]),28],orchid2:[new e([8193,32,0,0,0,0,0,0]),28],droneRemoteIdProtocolEntityTags:[new e([8193,48,0,0,0,0,0,0]),28],segmentRouting:[new e([24320,0,0,0,0,0,0,0]),16],reserved:[[new e([8193,0,0,0,0,0,0,0]),23],[new e([8193,3512,0,0,0,0,0,0]),32],[new e([16383,0,0,0,0,0,0,0]),20]]},e.prototype.isIPv4MappedAddress=function(){return this.range()===`ipv4Mapped`},e.prototype.kind=function(){return`ipv6`},e.prototype.match=function(e,t){let n;if(t===void 0&&(n=e,e=n[0],t=n[1]),e.kind()!==`ipv6`)throw Error(`ipaddr: cannot match ipv6 address with non-ipv6 one`);return u(this.parts,e.parts,16,t)},e.prototype.prefixLengthFromSubnetMask=function(){let e=0,t=!1,n={0:16,32768:15,49152:14,57344:13,61440:12,63488:11,64512:10,65024:9,65280:8,65408:7,65472:6,65504:5,65520:4,65528:3,65532:2,65534:1,65535:0},r,i;for(let a=7;a>=0;--a)if(r=this.parts[a],r in n){if(i=n[r],t&&i!==0)return null;i!==16&&(t=!0),e+=i}else return null;return 128-e},e.prototype.range=function(){return p.subnetMatch(this,this.SpecialRanges)},e.prototype.toByteArray=function(){let e,t=[],n=this.parts;for(let r=0;r<n.length;r++)e=n[r],t.push(e>>8),t.push(e&255);return t},e.prototype.toFixedLengthString=function(){let e=(function(){let e=[];for(let t=0;t<this.parts.length;t++)e.push(f(this.parts[t].toString(16),4));return e}).call(this).join(`:`),t=``;return this.zoneId&&(t=`%${this.zoneId}`),e+t},e.prototype.toIPv4Address=function(){if(!this.isIPv4MappedAddress())throw Error(`ipaddr: trying to convert a generic ipv6 address to ipv4`);let e=this.parts.slice(-2),t=e[0],n=e[1];return new p.IPv4([t>>8,t&255,n>>8,n&255])},e.prototype.toNormalizedString=function(){let e=(function(){let e=[];for(let t=0;t<this.parts.length;t++)e.push(this.parts[t].toString(16));return e}).call(this).join(`:`),t=``;return this.zoneId&&(t=`%${this.zoneId}`),e+t},e.prototype.toRFC5952String=function(){let e=/((^|:)(0(:|$)){2,})/g,t=``;this.zoneId&&(t=`%${this.zoneId}`);let n=this.toNormalizedString(),r=n.slice(0,n.length-t.length),i=0,a=-1,o=-1,s;for(;s=e.exec(r);){let e=(s[0].match(/0/g)||[]).length;e>o&&(o=e,i=s.index,a=s[0].length)}return a<0?r+t:`${r.substring(0,i)}::${r.substring(i+a)}${t}`},e.prototype.toString=function(){return this.toRFC5952String()},e})(),p.IPv6.broadcastAddressFromCIDR=function(e){try{let t=this.parseCIDR(e),n=t[0].toByteArray(),r=this.subnetMaskFromPrefixLength(t[1]).toByteArray(),i=[],a=0;for(;a<16;)i.push(parseInt(n[a],10)|parseInt(r[a],10)^255),a++;return new this(i)}catch(e){throw Error(`ipaddr: the address does not have IPv6 CIDR format`,{cause:e})}},p.IPv6.isIPv6=function(e){return this.parser(e)!==null},p.IPv6.isValid=function(e){if(typeof e==`string`&&e.indexOf(`:`)===-1)return!1;try{let t=this.parser(e);return new this(t.parts,t.zoneId),!0}catch{return!1}},p.IPv6.isValidCIDR=function(e){if(typeof e==`string`&&e.indexOf(`:`)===-1)return!1;try{return this.parseCIDR(e),!0}catch{return!1}},p.IPv6.networkAddressFromCIDR=function(e){let t,n,r,i,a;try{for(t=this.parseCIDR(e),r=t[0].toByteArray(),a=this.subnetMaskFromPrefixLength(t[1]).toByteArray(),i=[],n=0;n<16;)i.push(parseInt(r[n],10)&parseInt(a[n],10)),n++;return new this(i)}catch(e){throw Error(`ipaddr: the address does not have IPv6 CIDR format`,{cause:e})}},p.IPv6.parse=function(e){let t=this.parser(e);if(t===null)throw Error(`ipaddr: string is not formatted like an IPv6 Address`);return new this(t.parts,t.zoneId)},p.IPv6.parseCIDR=function(e){let t,n,r;if((n=e.match(/^(.+)\/(\d+)$/))&&(t=parseInt(n[2]),t>=0&&t<=128))return r=[this.parse(n[1]),t],Object.defineProperty(r,"toString",{value:function(){return this.join(`/`)}}),r;throw Error(`ipaddr: string is not formatted like an IPv6 CIDR range`)},p.IPv6.parser=function(e){let t,n,r,i,a,o;if(r=e.match(c.deprecatedTransitional))return this.parser(`::ffff:${r[1]}`);if(c.native.test(e))return l(e,8);if((r=e.match(c.transitional))&&(o=r[6]||``,t=r[1],r[1].endsWith(`::`)||(t=t.slice(0,-1)),t=l(t+o,6),t&&t.parts)){for(a=[parseInt(r[2]),parseInt(r[3]),parseInt(r[4]),parseInt(r[5])],n=0;n<a.length;n++)if(i=a[n],!(0<=i&&i<=255))return null;return t.parts.push(a[0]<<8|a[1]),t.parts.push(a[2]<<8|a[3]),{parts:t.parts,zoneId:t.zoneId}}return null},p.IPv6.subnetMaskFromPrefixLength=function(e){if(e=parseInt(e),Number.isNaN(e)||e<0||e>128)throw Error(`ipaddr: invalid IPv6 prefix length`);let t=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],n=0,r=Math.floor(e/8);for(;n<r;)t[n]=255,n++;return r<16&&(t[r]=2**(e%8)-1<<8-e%8),new this(t)},p.fromByteArray=function(e){let t=e.length;if(t===4)return new p.IPv4(e);if(t===16)return new p.IPv6(e);throw Error(`ipaddr: the binary input is neither an IPv6 nor IPv4 address`)},p.isValid=function(e){return p.IPv6.isValid(e)||p.IPv4.isValid(e)},p.isValidCIDR=function(e){return p.IPv6.isValidCIDR(e)||p.IPv4.isValidCIDR(e)},p.parse=function(e){if(p.IPv6.isValid(e))return p.IPv6.parse(e);if(p.IPv4.isValid(e))return p.IPv4.parse(e);throw Error(`ipaddr: the address has neither IPv6 nor IPv4 format`)},p.parseCIDR=function(e){try{return p.IPv6.parseCIDR(e)}catch{try{return p.IPv4.parseCIDR(e)}catch(e){throw Error(`ipaddr: the address has neither IPv6 nor IPv4 CIDR format`,{cause:e})}}},p.process=function(e){let t=this.parse(e);return t.kind()===`ipv6`&&t.isIPv4MappedAddress()?t.toIPv4Address():t},p.subnetMatch=function(e,t,n){let r,i,a,o;for(i in n??=`unicast`,t)if(Object.prototype.hasOwnProperty.call(t,i)){for(a=t[i],a[0]&&!(a[0]instanceof Array)&&(a=[a]),r=0;r<a.length;r++)if(o=a[r],e.kind()===o[0].kind()&&e.match.apply(e,o))return i}return n},t!==void 0&&t.exports?t.exports=p:e.ipaddr=p})(e)}))(),1);async function l(e,t){if(e.protocol!==`http:`&&e.protocol!==`https:`)throw new n(`INVALID_ARGS`,`Unsupported source URL protocol: ${e.protocol}`);if(e.username||e.password)throw new n(`INVALID_ARGS`,`Source URL credentials are not allowed`);d(t);let i=h(e.hostname);p(i)&&_(e.hostname);let a=o.isIP(i);if(a)return{address:i,family:a};let s;try{s=await u(i,t)}catch(e){throw r(e)?e:new n(`INVALID_ARGS`,`Source URL host could not be resolved: ${i}`,{hint:`Use a public artifact URL.`},e)}if(s.length===0)throw new n(`INVALID_ARGS`,`Source URL host could not be resolved: ${i}`,{hint:`Use a public artifact URL.`});s.some(e=>m(e.address))&&_(i);let c=s[0];return{address:c.address,family:c.family}}async function u(e,t){let n=s.lookup(e,{all:!0,verbatim:!0});return t?await new Promise((e,r)=>{let i=()=>r(f(t.reason));t.addEventListener(`abort`,i,{once:!0}),n.then(e,r).finally(()=>t.removeEventListener(`abort`,i))}):await n}function d(e){if(e?.aborted)throw f(e.reason)}function f(e){return i(void 0,e)}function p(e){let t;try{t=h(e)}catch{return!0}return!t||t===`localhost`||t.endsWith(`.localhost`)?!0:o.isIP(t)!==0&&m(t)}function m(e){try{return c.default.process(g(e)).range()!==`unicast`}catch{return!0}}function h(e){let t=g(e).toLowerCase().replace(/\.$/,``);if(!t||t.includes(`%`))throw new n(`INVALID_ARGS`,`Source URL host is not allowed`,{hint:`Use a public artifact URL.`});return t}function g(e){return e.startsWith(`[`)&&e.endsWith(`]`)?e.slice(1,-1):e}function _(e){throw new n(`INVALID_ARGS`,`Source URL host is not allowed because it resolves to a non-public address: ${e}`,{hint:`Use a public artifact URL.`})}var v=a();async function y(e){let t=b(e.url),n=t?C(t,e.url):S(e.approvedAddress,e.family),r=t?w(e.url,e.approvedAddress,e.family):e.url;try{let i={dispatcher:n,headers:t?{...e.headers,host:e.url.host}:e.headers,maxRedirections:0,method:`GET`,signal:e.signal},a=await(0,v.request)(r,i);return{statusCode:a.statusCode,headers:a.headers,body:a.body,close:async()=>await D(n)}}catch(e){throw await D(n),e}}function b(e,t=process.env){if(x(e,t.no_proxy??t.NO_PROXY))return;let n=t.http_proxy??t.HTTP_PROXY;return e.protocol===`http:`?n||void 0:(t.https_proxy??t.HTTPS_PROXY)||n||void 0}function x(e,t){if(!t)return!1;let n=E(e.hostname).toLowerCase(),r=e.port||(e.protocol===`https:`?`443`:`80`);return t.split(/[\s,]+/).filter(Boolean).some(e=>{if(e===`*`)return!0;let t=T(e);if(t.port&&t.port!==r)return!1;let i=t.hostname.replace(/^\*?\./,``).toLowerCase();return n===i||n.endsWith(`.${i}`)})}function S(e,t){return new v.Agent({connect:{lookup:(n,r,i)=>{if(r.all){i(null,[{address:e,family:t}]);return}i(null,e,t)}}})}function C(e,t){let n=o.isIP(E(t.hostname))!==0;return new v.ProxyAgent({uri:e,proxyTunnel:!0,requestTls:t.protocol===`https:`&&!n?{servername:E(t.hostname)}:void 0})}function w(e,t,n){let r=new URL(e);return r.hostname=n===6?`[${E(t)}]`:t,r}function T(e){if(e.startsWith(`[`)){let t=e.indexOf(`]`);return t<0?{hostname:e}:{hostname:e.slice(1,t),port:e[t+1]===`:`?e.slice(t+2):void 0}}let t=e.lastIndexOf(`:`);return t>-1&&e.indexOf(`:`)===t?{hostname:e.slice(0,t),port:e.slice(t+1)}:{hostname:e}}function E(e){return e.startsWith(`[`)&&e.endsWith(`]`)?e.slice(1,-1):e}async function D(e){await e.close()}export{b as n,l as r,y as t};
1
+ import{a as e,t}from"./rolldown-runtime.js";import{A as n,M as r,R as i}from"./sdk-contracts.js";import{t as a}from"./undici.js";import o from"node:net";import s from"node:dns/promises";var c=e(t(((e,t)=>{(function(e){let n=`(0?\\d+|0x[a-f0-9]+)`,r={fourOctet:RegExp(`^${n}\\.${n}\\.${n}\\.${n}$`,`i`),threeOctet:RegExp(`^${n}\\.${n}\\.${n}$`,`i`),twoOctet:RegExp(`^${n}\\.${n}$`,`i`),longValue:RegExp(`^${n}$`,`i`)},i=RegExp(`^0[0-7]+$`,`i`),a=RegExp(`^0x[a-f0-9]+$`,`i`),o=`%[0-9a-z]{1,}`,s=`(?:[0-9a-f]+::?)+`,c={zoneIndex:RegExp(o,`i`),native:RegExp(`^(::)?(${s})?([0-9a-f]+)?(::)?(${o})?$`,`i`),deprecatedTransitional:RegExp(`^(?:::)(${n}\\.${n}\\.${n}\\.${n}(${o})?)$`,`i`),transitional:RegExp(`^((?:${s})|(?:::)(?:${s})?)${n}\\.${n}\\.${n}\\.${n}(${o})?$`,`i`)};function l(e,t){if(e.indexOf(`::`)!==e.lastIndexOf(`::`))return null;let n=0,r=-1,i=(e.match(c.zoneIndex)||[])[0],a,o;for(i&&(i=i.substring(1),e=e.replace(/%.+$/,``));(r=e.indexOf(`:`,r+1))>=0;)n++;if(e.substr(0,2)===`::`&&n--,e.substr(-2,2)===`::`&&n--,n>=t)return null;for(o=t-n,a=`:`;o--;)a+=`0:`;return e=e.replace(`::`,a),e[0]===`:`&&(e=e.slice(1)),e[e.length-1]===`:`&&(e=e.slice(0,-1)),t=(function(){let t=e.split(`:`),n=[];for(let e=0;e<t.length;e++)n.push(t[e].length>4?NaN:parseInt(t[e],16));return n})(),{parts:t,zoneId:i}}function u(e,t,n,r){if(e.length!==t.length)throw Error(`ipaddr: cannot match CIDR for objects with different lengths`);let i=0,a;for(;r>0;){if(a=n-r,a<0&&(a=0),e[i]>>a!==t[i]>>a)return!1;r-=n,i+=1}return!0}function d(e){if(a.test(e))return parseInt(e,16);if(e[0]===`0`&&!isNaN(parseInt(e[1],10))){if(i.test(e))return parseInt(e,8);throw Error(`ipaddr: cannot parse ${e} as octal`)}return parseInt(e,10)}function f(e,t){for(;e.length<t;)e=`0${e}`;return e}let p={};p.IPv4=(function(){function e(e){if(e.length!==4)throw Error(`ipaddr: ipv4 octet count should be 4`);let t,n;for(t=0;t<e.length;t++)if(n=e[t],!(0<=n&&n<=255))throw Error(`ipaddr: ipv4 octet should fit in 8 bits`);this.octets=e}return e.prototype.SpecialRanges={unspecified:[[new e([0,0,0,0]),8]],broadcast:[[new e([255,255,255,255]),32]],multicast:[[new e([224,0,0,0]),4]],linkLocal:[[new e([169,254,0,0]),16]],loopback:[[new e([127,0,0,0]),8]],carrierGradeNat:[[new e([100,64,0,0]),10]],private:[[new e([10,0,0,0]),8],[new e([172,16,0,0]),12],[new e([192,168,0,0]),16]],reserved:[[new e([192,0,0,0]),24],[new e([192,0,2,0]),24],[new e([192,88,99,0]),24],[new e([198,18,0,0]),15],[new e([198,51,100,0]),24],[new e([203,0,113,0]),24],[new e([240,0,0,0]),4]],as112:[[new e([192,175,48,0]),24],[new e([192,31,196,0]),24]],amt:[[new e([192,52,193,0]),24]]},e.prototype.kind=function(){return`ipv4`},e.prototype.match=function(e,t){let n;if(t===void 0&&(n=e,e=n[0],t=n[1]),e.kind()!==`ipv4`)throw Error(`ipaddr: cannot match ipv4 address with non-ipv4 one`);return u(this.octets,e.octets,8,t)},e.prototype.prefixLengthFromSubnetMask=function(){let e=0,t=!1,n={0:8,128:7,192:6,224:5,240:4,248:3,252:2,254:1,255:0},r,i,a;for(r=3;r>=0;--r)if(i=this.octets[r],i in n){if(a=n[i],t&&a!==0)return null;a!==8&&(t=!0),e+=a}else return null;return 32-e},e.prototype.range=function(){return p.subnetMatch(this,this.SpecialRanges)},e.prototype.toByteArray=function(){return this.octets.slice(0)},e.prototype.toIPv4MappedAddress=function(){return p.IPv6.parse(`::ffff:${this.toString()}`)},e.prototype.toNormalizedString=function(){return this.toString()},e.prototype.toString=function(){return this.octets.join(`.`)},e})(),p.IPv4.broadcastAddressFromCIDR=function(e){try{let t=this.parseCIDR(e),n=t[0].toByteArray(),r=this.subnetMaskFromPrefixLength(t[1]).toByteArray(),i=[],a=0;for(;a<4;)i.push(parseInt(n[a],10)|parseInt(r[a],10)^255),a++;return new this(i)}catch(e){throw Error(`ipaddr: the address does not have IPv4 CIDR format`,{cause:e})}},p.IPv4.isIPv4=function(e){return this.parser(e)!==null},p.IPv4.isValid=function(e){try{return new this(this.parser(e)),!0}catch{return!1}},p.IPv4.isValidCIDR=function(e){try{return this.parseCIDR(e),!0}catch{return!1}},p.IPv4.isValidFourPartDecimal=function(e){return!!(p.IPv4.isValid(e)&&e.match(/^(0|[1-9]\d*)(\.(0|[1-9]\d*)){3}$/))},p.IPv4.isValidCIDRFourPartDecimal=function(e){let t=e.match(/^(.+)\/(\d+)$/);return!p.IPv4.isValidCIDR(e)||!t?!1:p.IPv4.isValidFourPartDecimal(t[1])},p.IPv4.networkAddressFromCIDR=function(e){let t,n,r,i,a;try{for(t=this.parseCIDR(e),r=t[0].toByteArray(),a=this.subnetMaskFromPrefixLength(t[1]).toByteArray(),i=[],n=0;n<4;)i.push(parseInt(r[n],10)&parseInt(a[n],10)),n++;return new this(i)}catch(e){throw Error(`ipaddr: the address does not have IPv4 CIDR format`,{cause:e})}},p.IPv4.parse=function(e){let t=this.parser(e);if(t===null)throw Error(`ipaddr: string is not formatted like an IPv4 Address`);return new this(t)},p.IPv4.parseCIDR=function(e){let t;if(t=e.match(/^(.+)\/(\d+)$/)){let e=parseInt(t[2]);if(e>=0&&e<=32){let n=[this.parse(t[1]),e];return Object.defineProperty(n,"toString",{value:function(){return this.join(`/`)}}),n}}throw Error(`ipaddr: string is not formatted like an IPv4 CIDR range`)},p.IPv4.parser=function(e){let t,n,i;if(t=e.match(r.fourOctet))return(function(){let e=t.slice(1,6),r=[];for(let t=0;t<e.length;t++)n=e[t],r.push(d(n));return r})();if(t=e.match(r.longValue)){if(i=d(t[1]),i>4294967295||i<0)throw Error(`ipaddr: address outside defined range`);return(function(){let e=[],t;for(t=0;t<=24;t+=8)e.push(i>>t&255);return e})().reverse()}return(t=e.match(r.twoOctet))?(function(){let e=t.slice(1,4),n=[];if(i=d(e[1]),i>16777215||i<0)throw Error(`ipaddr: address outside defined range`);return n.push(d(e[0])),n.push(i>>16&255),n.push(i>>8&255),n.push(i&255),n})():(t=e.match(r.threeOctet))?(function(){let e=t.slice(1,5),n=[];if(i=d(e[2]),i>65535||i<0)throw Error(`ipaddr: address outside defined range`);return n.push(d(e[0])),n.push(d(e[1])),n.push(i>>8&255),n.push(i&255),n})():null},p.IPv4.subnetMaskFromPrefixLength=function(e){if(e=parseInt(e),Number.isNaN(e)||e<0||e>32)throw Error(`ipaddr: invalid IPv4 prefix length`);let t=[0,0,0,0],n=0,r=Math.floor(e/8);for(;n<r;)t[n]=255,n++;return r<4&&(t[r]=2**(e%8)-1<<8-e%8),new this(t)},p.IPv6=(function(){function e(e,t){let n,r;if(e.length===16)for(this.parts=[],n=0;n<=14;n+=2)this.parts.push(e[n]<<8|e[n+1]);else if(e.length===8)this.parts=e;else throw Error(`ipaddr: ipv6 part count should be 8 or 16`);for(n=0;n<this.parts.length;n++)if(r=this.parts[n],!(0<=r&&r<=65535))throw Error(`ipaddr: ipv6 part should fit in 16 bits`);t&&(this.zoneId=t)}return e.prototype.SpecialRanges={unspecified:[new e([0,0,0,0,0,0,0,0]),128],linkLocal:[new e([65152,0,0,0,0,0,0,0]),10],multicast:[new e([65280,0,0,0,0,0,0,0]),8],loopback:[new e([0,0,0,0,0,0,0,1]),128],uniqueLocal:[new e([64512,0,0,0,0,0,0,0]),7],ipv4Mapped:[new e([0,0,0,0,0,65535,0,0]),96],deprecatedSiteLocal:[new e([65216,0,0,0,0,0,0,0]),10],discard:[new e([256,0,0,0,0,0,0,0]),64],rfc6145:[new e([0,0,0,0,65535,0,0,0]),96],rfc6052:[[new e([100,65435,0,0,0,0,0,0]),96],[new e([100,65435,1,0,0,0,0,0]),48]],"6to4":[new e([8194,0,0,0,0,0,0,0]),16],teredo:[new e([8193,0,0,0,0,0,0,0]),32],benchmarking:[new e([8193,2,0,0,0,0,0,0]),48],amt:[new e([8193,3,0,0,0,0,0,0]),32],as112v6:[[new e([8193,4,274,0,0,0,0,0]),48],[new e([9760,79,32768,0,0,0,0,0]),48]],deprecatedOrchid:[new e([8193,16,0,0,0,0,0,0]),28],orchid2:[new e([8193,32,0,0,0,0,0,0]),28],droneRemoteIdProtocolEntityTags:[new e([8193,48,0,0,0,0,0,0]),28],segmentRouting:[new e([24320,0,0,0,0,0,0,0]),16],reserved:[[new e([8193,0,0,0,0,0,0,0]),23],[new e([8193,3512,0,0,0,0,0,0]),32],[new e([16383,0,0,0,0,0,0,0]),20]]},e.prototype.isIPv4MappedAddress=function(){return this.range()===`ipv4Mapped`},e.prototype.kind=function(){return`ipv6`},e.prototype.match=function(e,t){let n;if(t===void 0&&(n=e,e=n[0],t=n[1]),e.kind()!==`ipv6`)throw Error(`ipaddr: cannot match ipv6 address with non-ipv6 one`);return u(this.parts,e.parts,16,t)},e.prototype.prefixLengthFromSubnetMask=function(){let e=0,t=!1,n={0:16,32768:15,49152:14,57344:13,61440:12,63488:11,64512:10,65024:9,65280:8,65408:7,65472:6,65504:5,65520:4,65528:3,65532:2,65534:1,65535:0},r,i;for(let a=7;a>=0;--a)if(r=this.parts[a],r in n){if(i=n[r],t&&i!==0)return null;i!==16&&(t=!0),e+=i}else return null;return 128-e},e.prototype.range=function(){return p.subnetMatch(this,this.SpecialRanges)},e.prototype.toByteArray=function(){let e,t=[],n=this.parts;for(let r=0;r<n.length;r++)e=n[r],t.push(e>>8),t.push(e&255);return t},e.prototype.toFixedLengthString=function(){let e=(function(){let e=[];for(let t=0;t<this.parts.length;t++)e.push(f(this.parts[t].toString(16),4));return e}).call(this).join(`:`),t=``;return this.zoneId&&(t=`%${this.zoneId}`),e+t},e.prototype.toIPv4Address=function(){if(!this.isIPv4MappedAddress())throw Error(`ipaddr: trying to convert a generic ipv6 address to ipv4`);let e=this.parts.slice(-2),t=e[0],n=e[1];return new p.IPv4([t>>8,t&255,n>>8,n&255])},e.prototype.toNormalizedString=function(){let e=(function(){let e=[];for(let t=0;t<this.parts.length;t++)e.push(this.parts[t].toString(16));return e}).call(this).join(`:`),t=``;return this.zoneId&&(t=`%${this.zoneId}`),e+t},e.prototype.toRFC5952String=function(){let e=/((^|:)(0(:|$)){2,})/g,t=``;this.zoneId&&(t=`%${this.zoneId}`);let n=this.toNormalizedString(),r=n.slice(0,n.length-t.length),i=0,a=-1,o=-1,s;for(;s=e.exec(r);){let e=(s[0].match(/0/g)||[]).length;e>o&&(o=e,i=s.index,a=s[0].length)}return a<0?r+t:`${r.substring(0,i)}::${r.substring(i+a)}${t}`},e.prototype.toString=function(){return this.toRFC5952String()},e})(),p.IPv6.broadcastAddressFromCIDR=function(e){try{let t=this.parseCIDR(e),n=t[0].toByteArray(),r=this.subnetMaskFromPrefixLength(t[1]).toByteArray(),i=[],a=0;for(;a<16;)i.push(parseInt(n[a],10)|parseInt(r[a],10)^255),a++;return new this(i)}catch(e){throw Error(`ipaddr: the address does not have IPv6 CIDR format`,{cause:e})}},p.IPv6.isIPv6=function(e){return this.parser(e)!==null},p.IPv6.isValid=function(e){if(typeof e==`string`&&e.indexOf(`:`)===-1)return!1;try{let t=this.parser(e);return new this(t.parts,t.zoneId),!0}catch{return!1}},p.IPv6.isValidCIDR=function(e){if(typeof e==`string`&&e.indexOf(`:`)===-1)return!1;try{return this.parseCIDR(e),!0}catch{return!1}},p.IPv6.networkAddressFromCIDR=function(e){let t,n,r,i,a;try{for(t=this.parseCIDR(e),r=t[0].toByteArray(),a=this.subnetMaskFromPrefixLength(t[1]).toByteArray(),i=[],n=0;n<16;)i.push(parseInt(r[n],10)&parseInt(a[n],10)),n++;return new this(i)}catch(e){throw Error(`ipaddr: the address does not have IPv6 CIDR format`,{cause:e})}},p.IPv6.parse=function(e){let t=this.parser(e);if(t===null)throw Error(`ipaddr: string is not formatted like an IPv6 Address`);return new this(t.parts,t.zoneId)},p.IPv6.parseCIDR=function(e){let t,n,r;if((n=e.match(/^(.+)\/(\d+)$/))&&(t=parseInt(n[2]),t>=0&&t<=128))return r=[this.parse(n[1]),t],Object.defineProperty(r,"toString",{value:function(){return this.join(`/`)}}),r;throw Error(`ipaddr: string is not formatted like an IPv6 CIDR range`)},p.IPv6.parser=function(e){let t,n,r,i,a,o;if(r=e.match(c.deprecatedTransitional))return this.parser(`::ffff:${r[1]}`);if(c.native.test(e))return l(e,8);if((r=e.match(c.transitional))&&(o=r[6]||``,t=r[1],r[1].endsWith(`::`)||(t=t.slice(0,-1)),t=l(t+o,6),t&&t.parts)){for(a=[parseInt(r[2]),parseInt(r[3]),parseInt(r[4]),parseInt(r[5])],n=0;n<a.length;n++)if(i=a[n],!(0<=i&&i<=255))return null;return t.parts.push(a[0]<<8|a[1]),t.parts.push(a[2]<<8|a[3]),{parts:t.parts,zoneId:t.zoneId}}return null},p.IPv6.subnetMaskFromPrefixLength=function(e){if(e=parseInt(e),Number.isNaN(e)||e<0||e>128)throw Error(`ipaddr: invalid IPv6 prefix length`);let t=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],n=0,r=Math.floor(e/8);for(;n<r;)t[n]=255,n++;return r<16&&(t[r]=2**(e%8)-1<<8-e%8),new this(t)},p.fromByteArray=function(e){let t=e.length;if(t===4)return new p.IPv4(e);if(t===16)return new p.IPv6(e);throw Error(`ipaddr: the binary input is neither an IPv6 nor IPv4 address`)},p.isValid=function(e){return p.IPv6.isValid(e)||p.IPv4.isValid(e)},p.isValidCIDR=function(e){return p.IPv6.isValidCIDR(e)||p.IPv4.isValidCIDR(e)},p.parse=function(e){if(p.IPv6.isValid(e))return p.IPv6.parse(e);if(p.IPv4.isValid(e))return p.IPv4.parse(e);throw Error(`ipaddr: the address has neither IPv6 nor IPv4 format`)},p.parseCIDR=function(e){try{return p.IPv6.parseCIDR(e)}catch{try{return p.IPv4.parseCIDR(e)}catch(e){throw Error(`ipaddr: the address has neither IPv6 nor IPv4 CIDR format`,{cause:e})}}},p.process=function(e){let t=this.parse(e);return t.kind()===`ipv6`&&t.isIPv4MappedAddress()?t.toIPv4Address():t},p.subnetMatch=function(e,t,n){let r,i,a,o;for(i in n??=`unicast`,t)if(Object.prototype.hasOwnProperty.call(t,i)){for(a=t[i],a[0]&&!(a[0]instanceof Array)&&(a=[a]),r=0;r<a.length;r++)if(o=a[r],e.kind()===o[0].kind()&&e.match.apply(e,o))return i}return n},t!==void 0&&t.exports?t.exports=p:e.ipaddr=p})(e)}))(),1);async function l(e,t){if(e.protocol!==`http:`&&e.protocol!==`https:`)throw new n(`INVALID_ARGS`,`Unsupported source URL protocol: ${e.protocol}`);if(e.username||e.password)throw new n(`INVALID_ARGS`,`Source URL credentials are not allowed`);d(t);let r=h(e.hostname);p(r)&&_(e.hostname);let a=o.isIP(r);if(a)return{address:r,family:a};let s;try{s=await u(r,t)}catch(e){throw i(e)?e:new n(`INVALID_ARGS`,`Source URL host could not be resolved: ${r}`,{hint:`Use a public artifact URL.`},e)}if(s.length===0)throw new n(`INVALID_ARGS`,`Source URL host could not be resolved: ${r}`,{hint:`Use a public artifact URL.`});s.some(e=>m(e.address))&&_(r);let c=s[0];return{address:c.address,family:c.family}}async function u(e,t){let n=s.lookup(e,{all:!0,verbatim:!0});return t?await new Promise((e,r)=>{let i=()=>r(f(t.reason));t.addEventListener(`abort`,i,{once:!0}),n.then(e,r).finally(()=>t.removeEventListener(`abort`,i))}):await n}function d(e){if(e?.aborted)throw f(e.reason)}function f(e){return r(void 0,e)}function p(e){let t;try{t=h(e)}catch{return!0}return!t||t===`localhost`||t.endsWith(`.localhost`)?!0:o.isIP(t)!==0&&m(t)}function m(e){try{return c.default.process(g(e)).range()!==`unicast`}catch{return!0}}function h(e){let t=g(e).toLowerCase().replace(/\.$/,``);if(!t||t.includes(`%`))throw new n(`INVALID_ARGS`,`Source URL host is not allowed`,{hint:`Use a public artifact URL.`});return t}function g(e){return e.startsWith(`[`)&&e.endsWith(`]`)?e.slice(1,-1):e}function _(e){throw new n(`INVALID_ARGS`,`Source URL host is not allowed because it resolves to a non-public address: ${e}`,{hint:`Use a public artifact URL.`})}var v=a();async function y(e){let t=b(e.url),n=t?C(t,e.url):S(e.approvedAddress,e.family),r=t?w(e.url,e.approvedAddress,e.family):e.url;try{let i={dispatcher:n,headers:t?{...e.headers,host:e.url.host}:e.headers,maxRedirections:0,method:`GET`,signal:e.signal},a=await(0,v.request)(r,i);return{statusCode:a.statusCode,headers:a.headers,body:a.body,close:async()=>await D(n)}}catch(e){throw await D(n),e}}function b(e,t=process.env){if(x(e,t.no_proxy??t.NO_PROXY))return;let n=t.http_proxy??t.HTTP_PROXY;return e.protocol===`http:`?n||void 0:(t.https_proxy??t.HTTPS_PROXY)||n||void 0}function x(e,t){if(!t)return!1;let n=E(e.hostname).toLowerCase(),r=e.port||(e.protocol===`https:`?`443`:`80`);return t.split(/[\s,]+/).filter(Boolean).some(e=>{if(e===`*`)return!0;let t=T(e);if(t.port&&t.port!==r)return!1;let i=t.hostname.replace(/^\*?\./,``).toLowerCase();return n===i||n.endsWith(`.${i}`)})}function S(e,t){return new v.Agent({connect:{lookup:(n,r,i)=>{if(r.all){i(null,[{address:e,family:t}]);return}i(null,e,t)}}})}function C(e,t){let n=o.isIP(E(t.hostname))!==0;return new v.ProxyAgent({uri:e,proxyTunnel:!0,requestTls:t.protocol===`https:`&&!n?{servername:E(t.hostname)}:void 0})}function w(e,t,n){let r=new URL(e);return r.hostname=n===6?`[${E(t)}]`:t,r}function T(e){if(e.startsWith(`[`)){let t=e.indexOf(`]`);return t<0?{hostname:e}:{hostname:e.slice(1,t),port:e[t+1]===`:`?e.slice(t+2):void 0}}let t=e.lastIndexOf(`:`);return t>-1&&e.indexOf(`:`)===t?{hostname:e.slice(0,t),port:e.slice(t+1)}:{hostname:e}}function E(e){return e.startsWith(`[`)&&e.endsWith(`]`)?e.slice(1,-1):e}async function D(e){await e.close()}export{b as n,l as r,y as t};
@@ -1 +1 @@
1
- import{D as e,k as t}from"./sdk-contracts.js";import{t as n}from"./path-resolution.js";import"./file.js";import{a as r,i,n as a,r as o}from"./archive.js";import{t as s}from"./byte-limit-stream.js";import{r as c,t as l}from"./install-source-network-transport.js";import u from"node:path";import{createWriteStream as d,promises as f}from"node:fs";import{AsyncLocalStorage as p}from"node:async_hooks";import m from"node:os";import{pipeline as h}from"node:stream/promises";async function g(t,n){let r=await f.stat(t).catch(()=>null);if(!r)throw new e(`INVALID_ARGS`,`App source not found: ${t}`);if(n.isInstallablePath(t,r))return{archivePath:n.archivePath,installablePath:t};if(r.isFile()&&x(t))return b(t,n,!1),await _(t,n);if(r.isDirectory()){let r=await y(t,n.isInstallablePath);if(r.length===1)return{archivePath:n.archivePath,installablePath:r[0]};if(r.length>1)throw new e(`INVALID_ARGS`,`Found multiple ${n.installableLabel} candidates under ${t}: ${r.join(`, `)}`,{matches:r});let i=await y(t,(e,t)=>!!(t.isFile()&&x(e)));if(i.length===1)return b(i[0],n,!0),await _(i[0],n);if(i.length>1)throw new e(`INVALID_ARGS`,`Found multiple nested archives under ${t}; expected one ${n.installableLabel} source`,{matches:i})}throw new e(`INVALID_ARGS`,`Expected ${n.installableLabel} source, but got ${t}`)}async function _(e,t){let n=await v(e,t.budget,t.archiveDepth+1);return t.onArchiveAccepted?.(t.archiveDepth+1),t.registerCleanup(n.cleanup),await g(n.outputPath,{...t,archivePath:t.archivePath??e,archiveDepth:t.archiveDepth+1})}async function v(t,n,r){let i=a(t);if(!i)throw new e(`INVALID_ARGS`,`Unsupported archive: ${t}`);let s=await f.mkdtemp(u.join(m.tmpdir(),`agent-device-archive-`)),c=u.join(s,`extracted`);try{return await o({archivePath:t,outputRoot:c,type:i,budget:n,depth:r}),{outputPath:c,cleanup:async()=>await f.rm(s,{recursive:!0,force:!0})}}catch(e){throw await f.rm(s,{recursive:!0,force:!0}),e}}async function y(e,t){let n=[],r=[{path:e,depth:0}];for(;r.length>0;){let e=r.shift();if(!e)continue;let i=await f.readdir(e.path,{withFileTypes:!0});i.sort((e,t)=>e.name.localeCompare(t.name));for(let a of i){if(a.name===`__MACOSX`||a.name.startsWith(`._`))continue;let i=u.join(e.path,a.name);t(i,a)?n.push(i):a.isDirectory()&&e.depth<5&&r.push({path:i,depth:e.depth+1})}}return[...new Set(n)]}function b(t,n,r){if(n.allowArchiveExtraction)return;let i=r?`URL sources must point directly to a ${n.installableLabel}; nested archives are not allowed`:`URL sources must point directly to a ${n.installableLabel}; archive extraction is not allowed`;throw new e(`INVALID_ARGS`,i,{path:t})}function x(e){return a(e)!==void 0}const S=new p;async function C(e){return await S.run({budget:new i,depth:0},e)}function w(){return S.getStore()?.budget}function T(){return S.getStore()?.depth??0}function E(e){let t=S.getStore();t&&(t.depth=Math.max(t.depth,e))}const D=new Set([301,302,303,307,308]),O=/^[A-Z][A-Z0-9_]{0,63}$/,k=new Set([`accept-encoding`,`connection`,`content-length`,`host`,`keep-alive`,`proxy-connection`,`proxy-authorization`,`te`,`trailer`,`transfer-encoding`,`upgrade`]);async function A(e){let t=V(e.url),n=L(e.headers);for(let r=0;;r+=1){let i=await j(t,n,e.signal);try{let a=N(i,t,r);if(a){a.origin!==t.origin&&(n=R(n)),t=a;continue}return P(i),await F(e.tempDir,t,i)}finally{await i.close()}}}async function j(t,n,r){let i=await c(t,r);try{return await l({url:t,approvedAddress:i.address,family:i.family,headers:{...n,"accept-encoding":`identity`},signal:r})}catch(t){if(t instanceof e)throw t;let n=M(t);throw new e(`COMMAND_FAILED`,n?`The daemon failed to fetch the app source (network error code: ${n})`:`The daemon failed to fetch the app source`,n?{networkErrorCode:n}:void 0,t)}}function M(e){let t=e?.code;return typeof t==`string`&&O.test(t)?t:void 0}function N(t,n,r){if(!D.has(t.statusCode))return;t.body.resume?.();let i=B(t.headers,`location`);if(!i||r>=5)throw new e(`COMMAND_FAILED`,`App source redirect limit was exceeded`,{status:t.statusCode});let a=new URL(i,n);if(n.protocol===`https:`&&a.protocol!==`https:`)throw new e(`COMMAND_FAILED`,`App source redirect downgraded HTTPS`);return a}function P(t){if(!(t.statusCode>=200&&t.statusCode<300))throw new e(`COMMAND_FAILED`,`Failed to download app source: ${t.statusCode}`,{status:t.statusCode})}async function F(t,n,i){let a=B(i.headers,`content-encoding`);if(a&&a.toLowerCase()!==`identity`)throw new e(`COMMAND_FAILED`,`App source response used unsupported content encoding`);I(B(i.headers,`content-length`));let o=u.join(t,z(i,n)),c=s({maxBytes:r,createLimitError:()=>new e(`COMMAND_FAILED`,`App source exceeds maximum size of ${r} bytes`,{reason:`ARTIFACT_BYTE_LIMIT`})});try{return await h(i.body,c,d(o,{flags:`wx`})),o}catch(e){throw await f.rm(o,{force:!0}).catch(()=>{}),e}}function I(t){if(t===null)return;if(!/^\d+$/.test(t))throw new e(`COMMAND_FAILED`,`App source response had invalid content-length`);let n=Number(t);if(!Number.isSafeInteger(n)||n>2147483648)throw new e(`COMMAND_FAILED`,`App source response exceeded the byte limit`,{reason:`ARTIFACT_BYTE_LIMIT`})}function L(e){let t=new Set(Object.entries(e??{}).filter(([e])=>e.toLowerCase()===`connection`).flatMap(([,e])=>e.split(`,`).map(e=>e.trim().toLowerCase())));return Object.fromEntries(Object.entries(e??{}).filter(([e])=>{let n=e.toLowerCase();return!k.has(n)&&!t.has(n)}))}function R(e){return Object.fromEntries(Object.entries(e).filter(([e])=>[`accept`,`user-agent`].includes(e.toLowerCase())))}function z(e,t){let n=(B(e.headers,`content-disposition`)?.match(/filename\*?=(?:UTF-8'')?"?([^";]+)"?/i))?.[1]?.trim()||u.basename(t.pathname)||`downloaded-artifact.bin`;return u.basename(n)}function B(e,t){let n=e[t];return Array.isArray(n)?n[0]??null:n??null}function V(t){let n;try{n=new URL(t)}catch{throw new e(`INVALID_ARGS`,`Invalid source URL`)}if(n.username||n.password)throw new e(`INVALID_ARGS`,`Source URL credentials are not allowed`);return n}const H=Object.freeze([`.zip`,`.tar`,`.tar.gz`,`.tgz`]);async function U(e){let t=[];try{let n=await G(e.source,{signal:e.signal,downloadTimeoutMs:e.downloadTimeoutMs});t.push(n.cleanup);let r=await g(n.localPath,{archivePath:void 0,isInstallablePath:e.isInstallablePath,installableLabel:e.installableLabel,allowArchiveExtraction:e.allowArchiveExtraction!==!1,registerCleanup:e=>{t.push(e)},budget:w()??new i,archiveDepth:0,onArchiveAccepted:E});return{archivePath:r.archivePath,installablePath:r.installablePath,cleanup:async()=>{await Q(t)}}}catch(e){throw await Q(t),e}}function W(e){return n(e)}async function G(e,t){if(e.kind===`path`)return{localPath:W(e.path),cleanup:async()=>{}};let n=await f.mkdtemp(u.join(m.tmpdir(),`agent-device-source-`));try{return{localPath:await K(n,e.url,e.headers,t),cleanup:async()=>{await f.rm(n,{recursive:!0,force:!0})}}}catch(e){throw await f.rm(n,{recursive:!0,force:!0}),e}}async function K(e,n,r,i){let a=i?.signal;if(a?.aborted)throw t();let o=i?.downloadTimeoutMs??12e4,s=AbortSignal.timeout(o),c=a?AbortSignal.any([a,s]):s;try{return await A({tempDir:e,url:n,headers:r,signal:c})}catch(e){throw q(e,a,s,o)}}function q(n,r,i,a){return r?.aborted?t(void 0,n):i.aborted?new e(`COMMAND_FAILED`,`App source download timed out after ${a}ms`,{timeoutMs:a},n):n}async function J(e){await c(e)}function Y(e){let t=e instanceof URL?e:new URL(e),n=t.hostname.toLowerCase();if(!n)return!1;let r=t.pathname;return X(n,r)||Z(n,r)}function X(e,t){return e===`api.github.com`?/^\/repos\/[^/]+\/[^/]+\/actions\/artifacts\/\d+\/zip$/i.test(t):e===`github.com`&&/^\/[^/]+\/[^/]+\/(?:actions\/runs\/\d+\/artifacts\/\d+|suites\/\d+\/artifacts\/\d+)$/i.test(t)}function Z(e,t){return e!==`expo.dev`&&!e.endsWith(`.expo.dev`)?!1:/^\/(?:artifacts\/eas\/|accounts\/[^/]+\/projects\/[^/]+\/builds\/)/i.test(t)}async function Q(e){for(let t of[...e].reverse())await t()}export{w as a,C as c,J as i,Y as n,T as o,U as r,E as s,H as t};
1
+ import{A as e,M as t}from"./sdk-contracts.js";import{t as n}from"./path-resolution.js";import"./file.js";import{a as r,i,n as a,r as o}from"./archive.js";import{t as s}from"./byte-limit-stream.js";import{r as c,t as l}from"./install-source-network-transport.js";import u from"node:path";import{createWriteStream as d,promises as f}from"node:fs";import{AsyncLocalStorage as p}from"node:async_hooks";import m from"node:os";import{pipeline as h}from"node:stream/promises";async function g(t,n){let r=await f.stat(t).catch(()=>null);if(!r)throw new e(`INVALID_ARGS`,`App source not found: ${t}`);if(n.isInstallablePath(t,r))return{archivePath:n.archivePath,installablePath:t};if(r.isFile()&&x(t))return b(t,n,!1),await _(t,n);if(r.isDirectory()){let r=await y(t,n.isInstallablePath);if(r.length===1)return{archivePath:n.archivePath,installablePath:r[0]};if(r.length>1)throw new e(`INVALID_ARGS`,`Found multiple ${n.installableLabel} candidates under ${t}: ${r.join(`, `)}`,{matches:r});let i=await y(t,(e,t)=>!!(t.isFile()&&x(e)));if(i.length===1)return b(i[0],n,!0),await _(i[0],n);if(i.length>1)throw new e(`INVALID_ARGS`,`Found multiple nested archives under ${t}; expected one ${n.installableLabel} source`,{matches:i})}throw new e(`INVALID_ARGS`,`Expected ${n.installableLabel} source, but got ${t}`)}async function _(e,t){let n=await v(e,t.budget,t.archiveDepth+1);return t.onArchiveAccepted?.(t.archiveDepth+1),t.registerCleanup(n.cleanup),await g(n.outputPath,{...t,archivePath:t.archivePath??e,archiveDepth:t.archiveDepth+1})}async function v(t,n,r){let i=a(t);if(!i)throw new e(`INVALID_ARGS`,`Unsupported archive: ${t}`);let s=await f.mkdtemp(u.join(m.tmpdir(),`agent-device-archive-`)),c=u.join(s,`extracted`);try{return await o({archivePath:t,outputRoot:c,type:i,budget:n,depth:r}),{outputPath:c,cleanup:async()=>await f.rm(s,{recursive:!0,force:!0})}}catch(e){throw await f.rm(s,{recursive:!0,force:!0}),e}}async function y(e,t){let n=[],r=[{path:e,depth:0}];for(;r.length>0;){let e=r.shift();if(!e)continue;let i=await f.readdir(e.path,{withFileTypes:!0});i.sort((e,t)=>e.name.localeCompare(t.name));for(let a of i){if(a.name===`__MACOSX`||a.name.startsWith(`._`))continue;let i=u.join(e.path,a.name);t(i,a)?n.push(i):a.isDirectory()&&e.depth<5&&r.push({path:i,depth:e.depth+1})}}return[...new Set(n)]}function b(t,n,r){if(n.allowArchiveExtraction)return;let i=r?`URL sources must point directly to a ${n.installableLabel}; nested archives are not allowed`:`URL sources must point directly to a ${n.installableLabel}; archive extraction is not allowed`;throw new e(`INVALID_ARGS`,i,{path:t})}function x(e){return a(e)!==void 0}const S=new p;async function C(e){return await S.run({budget:new i,depth:0},e)}function w(){return S.getStore()?.budget}function T(){return S.getStore()?.depth??0}function E(e){let t=S.getStore();t&&(t.depth=Math.max(t.depth,e))}const D=new Set([301,302,303,307,308]),O=/^[A-Z][A-Z0-9_]{0,63}$/,k=new Set([`accept-encoding`,`connection`,`content-length`,`host`,`keep-alive`,`proxy-connection`,`proxy-authorization`,`te`,`trailer`,`transfer-encoding`,`upgrade`]);async function A(e){let t=H(e.url),n=R(L(e.headers));for(let r=0;;r+=1){let i=await j(t,n,e.signal);try{let a=N(i,t,r);if(a){a.origin!==t.origin&&(n=z(n)),t=a;continue}return P(i),await F(e.tempDir,t,i)}finally{await i.close()}}}async function j(t,n,r){let i=await c(t,r);try{return await l({url:t,approvedAddress:i.address,family:i.family,headers:{...n,"accept-encoding":`identity`},signal:r})}catch(t){if(t instanceof e)throw t;let n=M(t);throw new e(`COMMAND_FAILED`,n?`The daemon failed to fetch the app source (network error code: ${n})`:`The daemon failed to fetch the app source`,n?{networkErrorCode:n}:void 0,t)}}function M(e){let t=e?.code;return typeof t==`string`&&O.test(t)?t:void 0}function N(t,n,r){if(!D.has(t.statusCode))return;t.body.resume?.();let i=V(t.headers,`location`);if(!i||r>=5)throw new e(`COMMAND_FAILED`,`App source redirect limit was exceeded`,{status:t.statusCode});let a=new URL(i,n);if(n.protocol===`https:`&&a.protocol!==`https:`)throw new e(`COMMAND_FAILED`,`App source redirect downgraded HTTPS`);return a}function P(t){if(!(t.statusCode>=200&&t.statusCode<300))throw new e(`COMMAND_FAILED`,`Failed to download app source: ${t.statusCode}`,{status:t.statusCode})}async function F(t,n,i){let a=V(i.headers,`content-encoding`);if(a&&a.toLowerCase()!==`identity`)throw new e(`COMMAND_FAILED`,`App source response used unsupported content encoding`);I(V(i.headers,`content-length`));let o=u.join(t,B(i,n)),c=s({maxBytes:r,createLimitError:()=>new e(`COMMAND_FAILED`,`App source exceeds maximum size of ${r} bytes`,{reason:`ARTIFACT_BYTE_LIMIT`})});try{return await h(i.body,c,d(o,{flags:`wx`})),o}catch(e){throw await f.rm(o,{force:!0}).catch(()=>{}),e}}function I(t){if(t===null)return;if(!/^\d+$/.test(t))throw new e(`COMMAND_FAILED`,`App source response had invalid content-length`);let n=Number(t);if(!Number.isSafeInteger(n)||n>2147483648)throw new e(`COMMAND_FAILED`,`App source response exceeded the byte limit`,{reason:`ARTIFACT_BYTE_LIMIT`})}function L(e){let t=new Set(Object.entries(e??{}).filter(([e])=>e.toLowerCase()===`connection`).flatMap(([,e])=>e.split(`,`).map(e=>e.trim().toLowerCase())));return Object.fromEntries(Object.entries(e??{}).filter(([e])=>{let n=e.toLowerCase();return!k.has(n)&&!t.has(n)}))}function R(e){return Object.keys(e).some(e=>e.toLowerCase()===`user-agent`)?e:{...e,"user-agent":`agent-device`}}function z(e){return Object.fromEntries(Object.entries(e).filter(([e])=>[`accept`,`user-agent`].includes(e.toLowerCase())))}function B(e,t){let n=(V(e.headers,`content-disposition`)?.match(/filename\*?=(?:UTF-8'')?"?([^";]+)"?/i))?.[1]?.trim()||u.basename(t.pathname)||`downloaded-artifact.bin`;return u.basename(n)}function V(e,t){let n=e[t];return Array.isArray(n)?n[0]??null:n??null}function H(t){let n;try{n=new URL(t)}catch{throw new e(`INVALID_ARGS`,`Invalid source URL`)}if(n.username||n.password)throw new e(`INVALID_ARGS`,`Source URL credentials are not allowed`);return n}const U=Object.freeze([`.zip`,`.tar`,`.tar.gz`,`.tgz`]);async function W(e){let t=[];try{let n=await K(e.source,{signal:e.signal,downloadTimeoutMs:e.downloadTimeoutMs});t.push(n.cleanup);let r=await g(n.localPath,{archivePath:void 0,isInstallablePath:e.isInstallablePath,installableLabel:e.installableLabel,allowArchiveExtraction:e.allowArchiveExtraction!==!1,registerCleanup:e=>{t.push(e)},budget:w()??new i,archiveDepth:0,onArchiveAccepted:E});return{archivePath:r.archivePath,installablePath:r.installablePath,cleanup:async()=>{await $(t)}}}catch(e){throw await $(t),e}}function G(e){return n(e)}async function K(e,t){if(e.kind===`path`)return{localPath:G(e.path),cleanup:async()=>{}};let n=await f.mkdtemp(u.join(m.tmpdir(),`agent-device-source-`));try{return{localPath:await q(n,e.url,e.headers,t),cleanup:async()=>{await f.rm(n,{recursive:!0,force:!0})}}}catch(e){throw await f.rm(n,{recursive:!0,force:!0}),e}}async function q(e,n,r,i){let a=i?.signal;if(a?.aborted)throw t();let o=i?.downloadTimeoutMs??12e4,s=AbortSignal.timeout(o),c=a?AbortSignal.any([a,s]):s;try{return await A({tempDir:e,url:n,headers:r,signal:c})}catch(e){throw J(e,a,s,o)}}function J(n,r,i,a){return r?.aborted?t(void 0,n):i.aborted?new e(`COMMAND_FAILED`,`App source download timed out after ${a}ms`,{timeoutMs:a},n):n}async function Y(e){await c(e)}function X(e){let t=e instanceof URL?e:new URL(e),n=t.hostname.toLowerCase();if(!n)return!1;let r=t.pathname;return Z(n,r)||Q(n,r)}function Z(e,t){return e===`api.github.com`?/^\/repos\/[^/]+\/[^/]+\/actions\/artifacts\/\d+\/zip$/i.test(t):e===`github.com`&&/^\/[^/]+\/[^/]+\/(?:actions\/runs\/\d+\/artifacts\/\d+|suites\/\d+\/artifacts\/\d+)$/i.test(t)}function Q(e,t){return e!==`expo.dev`&&!e.endsWith(`.expo.dev`)?!1:/^\/(?:artifacts\/eas\/|accounts\/[^/]+\/projects\/[^/]+\/builds\/)/i.test(t)}async function $(e){for(let t of[...e].reverse())await t()}export{w as a,C as c,Y as i,X as n,T as o,W as r,E as s,U as t};
@@ -1 +1 @@
1
- import{D as e}from"./sdk-contracts.js";import{Sr as t,_r as n,br as r,vr as i,yr as a}from"./sdk-batch.js";function o(e){return e?.startsWith(`@`)?e.slice(1):e}const s=/^e\d+$/;function c(n){if(n[0]?.startsWith(`@`)){let e=_(n.slice(1));return{ref:n[0],...e===void 0?{}:{label:e}}}if(s.test(n[0]??``))throw new e(`INVALID_ARGS`,`Did you mean "@${n[0]}"? Snapshot refs need the @ prefix.`);let r=t(n);if(r){if(r.rest.length>0)throw new e(`INVALID_ARGS`,m(n,r));return{selector:r.selectorExpression}}return u(n)}function l(n){let r=n[0];if(r?.startsWith(`@`)){let e=n.slice(1),t=e.length===0?void 0:e.join(` `);return{kind:`ref`,target:{ref:r},text:t}}if(s.test(r??``))throw new e(`INVALID_ARGS`,`Did you mean "@${r}"? Snapshot refs need the @ prefix.`);let i=t(n,{preferTrailingValue:!0});if(i)return{kind:`selector`,target:{selector:i.selectorExpression},text:i.rest.length===0?void 0:i.rest.join(` `)};let a=n.slice(2);return{kind:`point`,target:u(n.slice(0,2)),text:a.length===0?void 0:a.join(` `)}}function u(t){let n=t[0]??``,r=i(n);if(r){let i=d(n)?r.value:[r.value,...t.slice(1)].join(` `).trim();throw new e(`INVALID_ARGS`,f({key:r.key,value:i}))}let a=Number(t[0]),o=Number(t[1]);if(Number.isFinite(a)&&Number.isFinite(o))return{x:a,y:o};throw new e(`INVALID_ARGS`,p(t))}function d(e){let t=e.slice(e.indexOf(`=`)+1).trim();if(t.length<2)return!1;let n=t[0];return(n===`"`||n===`'`)&&t.endsWith(n)}function f(e){let{key:t,value:r}=e;return`Unknown selector key "${t}". Supported: ${n.join(`, `)}. ${a(t)?`Did you mean role=${t} label=${g(r)}?`:`Did you mean label=${g(r)}?`}`}function p(e){let t=e.filter(e=>e!==void 0).join(` `);if(!t.trim())return`Missing target. Pass an @ref from snapshot, a selector like text="Sign in", or "x y" coordinates.`;let n=`Target "${t}" is not a @ref, selector, or "x y" point.`;return e.some(e=>r(e??``))?`${n} Selector values with spaces need quotes, e.g. text="Sign in".`:`${n} To match by visible text, use text=${g(t)} (or label=/id=/role=), or pass an @ref from snapshot.`}function m(e,t){return`${`Selector ${t.selectorExpression} is followed by unexpected extra arguments: "${t.rest.join(` `)}".`} Selector values with spaces need quotes, e.g. ${h(e,t)??`text="Sign in"`}.`}function h(e,t){let n=e.length-t.rest.length,r=e[n-1];if(r===void 0)return;let i=r.indexOf(`=`);if(i<=0)return;let a=[r.slice(i+1),...t.rest].join(` `),o=`${r.slice(0,i+1)}${g(a)}`;return[...e.slice(0,n-1),o].join(` `)}function g(e){return`"${e.replaceAll(`\\`,String.raw`\\`).replaceAll(`"`,String.raw`\"`)}"`}function _(e){return e.join(` `).trim()||void 0}export{c as n,o as r,l as t};
1
+ import{A as e}from"./sdk-contracts.js";import{Sr as t,_r as n,br as r,vr as i,yr as a}from"./sdk-batch.js";function o(e){return e?.startsWith(`@`)?e.slice(1):e}const s=/^e\d+$/;function c(n){if(n[0]?.startsWith(`@`)){let e=_(n.slice(1));return{ref:n[0],...e===void 0?{}:{label:e}}}if(s.test(n[0]??``))throw new e(`INVALID_ARGS`,`Did you mean "@${n[0]}"? Snapshot refs need the @ prefix.`);let r=t(n);if(r){if(r.rest.length>0)throw new e(`INVALID_ARGS`,m(n,r));return{selector:r.selectorExpression}}return u(n)}function l(n){let r=n[0];if(r?.startsWith(`@`)){let e=n.slice(1),t=e.length===0?void 0:e.join(` `);return{kind:`ref`,target:{ref:r},text:t}}if(s.test(r??``))throw new e(`INVALID_ARGS`,`Did you mean "@${r}"? Snapshot refs need the @ prefix.`);let i=t(n,{preferTrailingValue:!0});if(i)return{kind:`selector`,target:{selector:i.selectorExpression},text:i.rest.length===0?void 0:i.rest.join(` `)};let a=n.slice(2);return{kind:`point`,target:u(n.slice(0,2)),text:a.length===0?void 0:a.join(` `)}}function u(t){let n=t[0]??``,r=i(n);if(r){let i=d(n)?r.value:[r.value,...t.slice(1)].join(` `).trim();throw new e(`INVALID_ARGS`,f({key:r.key,value:i}))}let a=Number(t[0]),o=Number(t[1]);if(Number.isFinite(a)&&Number.isFinite(o))return{x:a,y:o};throw new e(`INVALID_ARGS`,p(t))}function d(e){let t=e.slice(e.indexOf(`=`)+1).trim();if(t.length<2)return!1;let n=t[0];return(n===`"`||n===`'`)&&t.endsWith(n)}function f(e){let{key:t,value:r}=e;return`Unknown selector key "${t}". Supported: ${n.join(`, `)}. ${a(t)?`Did you mean role=${t} label=${g(r)}?`:`Did you mean label=${g(r)}?`}`}function p(e){let t=e.filter(e=>e!==void 0).join(` `);if(!t.trim())return`Missing target. Pass an @ref from snapshot, a selector like text="Sign in", or "x y" coordinates.`;let n=`Target "${t}" is not a @ref, selector, or "x y" point.`;return e.some(e=>r(e??``))?`${n} Selector values with spaces need quotes, e.g. text="Sign in".`:`${n} To match by visible text, use text=${g(t)} (or label=/id=/role=), or pass an @ref from snapshot.`}function m(e,t){return`${`Selector ${t.selectorExpression} is followed by unexpected extra arguments: "${t.rest.join(` `)}".`} Selector values with spaces need quotes, e.g. ${h(e,t)??`text="Sign in"`}.`}function h(e,t){let n=e.length-t.rest.length,r=e[n-1];if(r===void 0)return;let i=r.indexOf(`=`);if(i<=0)return;let a=[r.slice(i+1),...t.rest].join(` `),o=`${r.slice(0,i+1)}${g(a)}`;return[...e.slice(0,n-1),o].join(` `)}function g(e){return`"${e.replaceAll(`\\`,String.raw`\\`).replaceAll(`"`,String.raw`\"`)}"`}function _(e){return e.join(` `).trim()||void 0}export{c as n,o as r,l as t};
@@ -1 +1 @@
1
- import{D as e,O as t,n}from"./sdk-contracts.js";import{b as r,d as i}from"./sdk-device.js";import{dn as a}from"./sdk-batch.js";import{C as o,D as s,E as c,P as l,f as u,i as d,o as f,y as p,z as m}from"./session-snapshot.js";import{A as h,M as g,d as _,t as v}from"./parameterized-recorded-fill.js";import{i as y}from"./mobile-snapshot-semantics.js";import{r as b}from"./request-cancel.js";import"./request.js";import{i as x}from"./request-runtime-binding.js";import{n as S}from"./internal/daemon.js";import{i as C,t as w}from"./capture-disclosure.js";function T(e){let{req:t,logPath:n,traceLogPath:r}=e;return{verbose:t.flags?.verbose,logPath:n,traceLogPath:r,requestId:t.meta?.requestId,iosXctestrunFile:t.flags?.iosXctestrunFile,iosXctestDerivedDataPath:t.flags?.iosXctestDerivedDataPath,iosXctestEnvDir:t.flags?.iosXctestEnvDir}}function E(e,t){return!(!e||!i(e.device)||x(e.device)||t.skipPendingPostGestureStabilization&&c(e))}function D(e){let{session:t,selectorExpression:n}=e;return E(t,{skipPendingPostGestureStabilization:!0})?a(n):null}function O(e){let t=e.identifier?.trim();if(t)return{key:`id`,value:t};let n=e.label?.trim();return n?{key:`label`,value:n}:null}async function k(e,t,n){let r=await p(e.device,t,e.appBundleId,n),i=r.found===!0,a=A(r);return{found:i,...typeof r.text==`string`?{text:r.text}:{},...a?{node:a}:{}}}function A(e){let t=e.nodes;if(!Array.isArray(t))return;let n=t[0];if(!(!n||typeof n!=`object`))return n}function j(e,n={}){let r=t(e);if(r.code===`ELEMENT_NOT_FOUND`)return n.delegateSemanticFailures===!0||n.allowElementNotFound===!0;if(r.code===`AMBIGUOUS_MATCH`)return n.delegateSemanticFailures===!0;if(r.code===`ELEMENT_OFFSCREEN`)return n.delegateSemanticFailures!==!1;if(r.code!==`COMMAND_FAILED`)return!1;let i=r.message.toLowerCase();return i.includes(`fetch failed`)||i.includes(`timed out`)||i.includes(`timeout`)||i.includes(`runner did not accept connection`)||i.includes(`invalid runner response`)}async function M(e){let{session:t,node:n,rootViewport:r,requestOptions:i}=e,a=O(n);if(!a)return null;let o;try{o=await k(t,a,i)}catch{return null}if(!o.found||!o.node?.rect)return null;let s={rect:o.node.rect,hittable:o.node.hittable===!0};return y(s,r)?s.rect:null}function N(e){let{operations:t,command:n,positionals:r,actionCommand:i=n,retryPositionals:a,flags:s,result:c,responseData:u,recordedTarget:d,recordedTargets:f,scheduleInteractionOutcomeRetry:p=!0,actionStartedAt:m,actionFinishedAt:h,androidFreshnessBaseline:g}=e,_=l(s),[v,y]=F({command:n,positionals:r,flags:_,result:c,responseData:u}),b=t.isSessionRecording()&&d?o(d):void 0,x=t.isSessionRecording()&&f?P(f):void 0;return t.recordAction({command:n,positionals:r,flags:_??{},result:v,...b?{targetEvidence:b}:{},...x?{targetEvidences:x}:{}}),t.markDeferredOutcome({command:n,action:i,positionals:a??r,flags:s,scheduleOutcomeRetry:p,androidFreshnessBaseline:g}),t.recordGestureVisualization(i,r,v,_??{},m,h),{ok:!0,data:y}}function P(e){let t=o(e.source),n=o(e.destination);return t&&n?{source:t,destination:n}:void 0}function F(e){if(e.command!==`fill`||typeof e.flags?.recordAs!=`string`)return[e.result,e.responseData];let t=h({ts:0,command:`fill`,positionals:e.positionals,flags:e.flags,result:e.result}),n=g(e.flags.recordAs);return[v(e.result,t,n),v(e.responseData,t,n)]}function I(t){let r=t.sessionStore.get(t.sessionName);if(!r)throw new e(`SESSION_NOT_FOUND`,n);return R({requestId:t.req.meta?.requestId,flags:t.req.flags,session:r,contextFromFlags:t.contextFromFlags,captureSnapshot:async(e,n)=>{let i=await t.captureSnapshotForSession(r,e,t.sessionStore,t.contextFromFlags,n);return w(t.activationProof,i)},runtimeSessions:f({sessionName:t.sessionName,getSession:()=>r,recordOptions:{includeSnapshot:!0,omitRefFrameSnapshot:t.req.internal?.findResolvedTarget!==void 0},setRecord:e=>{e.snapshot&&(d(r,e.snapshot),t.sessionStore.set(t.sessionName,r))}}),expireRefFrame:()=>m(r),confirmOffscreenTargetVisible:E(r,{skipPendingPostGestureStabilization:!1})?async(e,n)=>await M({session:r,node:e,rootViewport:n,requestOptions:T({req:t.req,logPath:t.logPath,traceLogPath:r.trace?.outPath})}):void 0,pairedGestureViewport:t.pairedGestureViewport,touchExecutor:t.touchExecutor,gestures:t.gestures})}function L(e){let{session:t,sessionStore:n,...r}=e;return N({...r,operations:{recordAction:n.recordAction.bind(n,t),markDeferredOutcome:e=>s({session:t,...e}),isSessionRecording:_.bind(null,t),recordGestureVisualization:S.bind(null,t)}})}function R(e){return u({backend:z(e),...C(`interaction commands`,{plural:!0}),sessions:e.runtimeSessions,signal:b(e.requestId)})}function z(e){let{flags:t,session:n}=e;return{platform:r(n.device),captureSnapshot:async(n,r)=>({snapshot:await e.captureSnapshot(t,{interactiveOnly:r?.interactiveOnly===!0,preferredBackend:r?.preferredBackend,includeRects:r?.includeRects===!0,signal:n.signal,boundCapture:e.touchExecutor?.captureSnapshot??e.gestures?.captureSnapshot})}),...B(e,()=>e.contextFromFlags(t,n.appBundleId,n.trace?.outPath)),...e.confirmOffscreenTargetVisible?{confirmOffscreenTargetVisible:async(t,n,r)=>await e.confirmOffscreenTargetVisible(n,r)}:{},...V(e.touchExecutor,e.expireRefFrame,t)}}function B(e,t){let n=e.gestures,r=e.pairedGestureViewport;return n?{resolveGestureViewport:async()=>r??await n.gestureViewport?.(t()),performGesture:async(r,i)=>(e.expireRefFrame(),H(await n.performPlan(i,t())))}:r?{resolveGestureViewport:async()=>r}:{}}function V(e,t,n){if(!e)return{};let{tapPoint:r,tapRef:i,fillPoint:a,fillRef:o,longPressPoint:s,hoverPoint:c,hoverRef:l}=e,u=async e=>(t(),H(await e()));return{tap:r?(e,t)=>u(()=>r(t,n)):void 0,tapTarget:i?(e,t)=>u(()=>i(t.ref)):void 0,fill:a?(e,t,n,r)=>u(()=>a(t,n,r)):void 0,fillTarget:o?(e,t,n,r)=>u(()=>o(t.ref,n,r)):void 0,longPress:s?(e,t,n)=>u(()=>s(t,n?.durationMs)):void 0,hover:c?(e,t)=>u(()=>c(t)):void 0,hoverTarget:l?(e,t)=>u(()=>l(t.ref)):void 0}}function H(e){return e&&typeof e==`object`?e:void 0}function U(e,t,n){return{ok:!1,error:{code:e,message:t,...n?{details:n}:{}}}}function W(e,t){if(!t||t.settle===!0)return null;let n=[];return t.settleQuietMs!==void 0&&n.push(`--settle-quiet`),n.length===0?null:U(`INVALID_ARGS`,`${e}: ${n.join(`, `)} require${n.length===1?`s`:``} --settle.`)}function G(e){if(e?.settle===!0)return{...e.settleQuietMs===void 0?{}:{quietMs:e.settleQuietMs},...e.timeoutMs===void 0?{}:{timeoutMs:e.timeoutMs}}}function K(t){try{return q(t),null}catch(t){if(t instanceof e)return U(t.code,t.message,t.details);throw t}}function q(t){let n=t.ref.startsWith(`@`)?t.ref.slice(1):t.ref,{admission:r,scope:i,currentGeneration:a}=t.frame;if(r.admitted)return;let o=r.reason===`plain_ref_requires_complete_frame`&&i!==`all`&&i.has(n)&&a!==void 0?`@${n}~s${a}`:void 0;throw new e(`COMMAND_FAILED`,Y(r.reason,t.ref),{reason:r.reason,ref:t.ref,currentGeneration:a,scope:i===`all`?`all`:Array.from(i),...t.mintedGeneration===void 0?{}:{mintedGeneration:t.mintedGeneration},...o?{suggestedRef:o}:{},hint:o?`Retry with the exact emitted ref ${o}.`:t.staleRefsWarning??J})}const J=`Capture a fresh interactive snapshot (snapshot -i) or use a stable selector, then retry.`;function Y(e,t){switch(e){case`ref_frame_expired`:return`Ref ${t} belongs to an expired ref frame — a device action since the snapshot invalidated it`;case`ref_generation_mismatch`:return`Ref ${t} was minted from a superseded snapshot generation`;case`plain_ref_requires_complete_frame`:return`Ref ${t} needs a complete snapshot — the current frame only authorizes its emitted refs`;case`ref_not_issued`:return`Ref ${t} was not issued by the current ref frame`}}export{I as a,E as c,W as i,D as l,K as n,L as o,G as r,j as s,q as t};
1
+ import{A as e,j as t,n}from"./sdk-contracts.js";import{b as r,d as i}from"./sdk-device.js";import{dn as a}from"./sdk-batch.js";import{B as o,D as s,F as c,O as l,b as u,f as d,i as f,o as p,w as m}from"./session-snapshot.js";import{A as h,M as g,d as _,t as v}from"./parameterized-recorded-fill.js";import{i as y}from"./mobile-snapshot-semantics.js";import{r as b}from"./request-cancel.js";import"./request.js";import{i as x}from"./request-runtime-binding.js";import{n as S}from"./internal/daemon.js";import{i as C,t as w}from"./capture-disclosure.js";function T(e){let{req:t,logPath:n,traceLogPath:r}=e;return{verbose:t.flags?.verbose,logPath:n,traceLogPath:r,requestId:t.meta?.requestId,iosXctestrunFile:t.flags?.iosXctestrunFile,iosXctestDerivedDataPath:t.flags?.iosXctestDerivedDataPath,iosXctestEnvDir:t.flags?.iosXctestEnvDir}}function E(e,t){return!(!e||!i(e.device)||x(e.device)||t.skipPendingPostGestureStabilization&&s(e))}function D(e){let{session:t,selectorExpression:n}=e;return E(t,{skipPendingPostGestureStabilization:!0})?a(n):null}function O(e){let t=e.identifier?.trim();if(t)return{key:`id`,value:t};let n=e.label?.trim();return n?{key:`label`,value:n}:null}async function k(e,t,n){let r=await u(e.device,t,e.appBundleId,n),i=r.found===!0,a=A(r);return{found:i,...typeof r.text==`string`?{text:r.text}:{},...a?{node:a}:{}}}function A(e){let t=e.nodes;if(!Array.isArray(t))return;let n=t[0];if(!(!n||typeof n!=`object`))return n}function j(e,n={}){let r=t(e);if(r.code===`ELEMENT_NOT_FOUND`)return n.delegateSemanticFailures===!0||n.allowElementNotFound===!0;if(r.code===`AMBIGUOUS_MATCH`)return n.delegateSemanticFailures===!0;if(r.code===`ELEMENT_OFFSCREEN`)return n.delegateSemanticFailures!==!1;if(r.code!==`COMMAND_FAILED`)return!1;let i=r.message.toLowerCase();return i.includes(`fetch failed`)||i.includes(`timed out`)||i.includes(`timeout`)||i.includes(`runner did not accept connection`)||i.includes(`invalid runner response`)}async function M(e){let{session:t,node:n,rootViewport:r,requestOptions:i}=e,a=O(n);if(!a)return null;let o;try{o=await k(t,a,i)}catch{return null}if(!o.found||!o.node?.rect)return null;let s={rect:o.node.rect,hittable:o.node.hittable===!0};return y(s,r)?s.rect:null}function N(e){let{operations:t,command:n,positionals:r,actionCommand:i=n,retryPositionals:a,flags:o,result:s,responseData:l,recordedTarget:u,recordedTargets:d,scheduleInteractionOutcomeRetry:f=!0,actionStartedAt:p,actionFinishedAt:h,androidFreshnessBaseline:g}=e,_=c(o),[v,y]=F({command:n,positionals:r,flags:_,result:s,responseData:l}),b=t.isSessionRecording()&&u?m(u):void 0,x=t.isSessionRecording()&&d?P(d):void 0;return t.recordAction({command:n,positionals:r,flags:_??{},result:v,...b?{targetEvidence:b}:{},...x?{targetEvidences:x}:{}}),t.markDeferredOutcome({command:n,action:i,positionals:a??r,flags:o,scheduleOutcomeRetry:f,androidFreshnessBaseline:g}),t.recordGestureVisualization(i,r,v,_??{},p,h),{ok:!0,data:y}}function P(e){let t=m(e.source),n=m(e.destination);return t&&n?{source:t,destination:n}:void 0}function F(e){if(e.command!==`fill`||typeof e.flags?.recordAs!=`string`)return[e.result,e.responseData];let t=h({ts:0,command:`fill`,positionals:e.positionals,flags:e.flags,result:e.result}),n=g(e.flags.recordAs);return[v(e.result,t,n),v(e.responseData,t,n)]}function I(t){let r=t.sessionStore.get(t.sessionName);if(!r)throw new e(`SESSION_NOT_FOUND`,n);return R({requestId:t.req.meta?.requestId,flags:t.req.flags,session:r,contextFromFlags:t.contextFromFlags,captureSnapshot:async(e,n)=>{let i=await t.captureSnapshotForSession(r,e,t.sessionStore,t.contextFromFlags,n);return w(t.captureProof,i)},runtimeSessions:p({sessionName:t.sessionName,getSession:()=>r,recordOptions:{includeSnapshot:!0,omitRefFrameSnapshot:t.req.internal?.findResolvedTarget!==void 0},setRecord:e=>{e.snapshot&&(f(r,e.snapshot),t.sessionStore.set(t.sessionName,r))}}),expireRefFrame:()=>o(r),confirmOffscreenTargetVisible:E(r,{skipPendingPostGestureStabilization:!1})?async(e,n)=>await M({session:r,node:e,rootViewport:n,requestOptions:T({req:t.req,logPath:t.logPath,traceLogPath:r.trace?.outPath})}):void 0,pairedGestureViewport:t.pairedGestureViewport,touchExecutor:t.touchExecutor,gestures:t.gestures})}function L(e){let{session:t,sessionStore:n,...r}=e;return N({...r,operations:{recordAction:n.recordAction.bind(n,t),markDeferredOutcome:e=>l({session:t,...e}),isSessionRecording:_.bind(null,t),recordGestureVisualization:S.bind(null,t)}})}function R(e){return d({backend:z(e),...C(`interaction commands`,{plural:!0}),sessions:e.runtimeSessions,signal:b(e.requestId)})}function z(e){let{flags:t,session:n}=e;return{platform:r(n.device),captureSnapshot:async(n,r)=>({snapshot:await e.captureSnapshot(t,{interactiveOnly:r?.interactiveOnly===!0,preferredBackend:r?.preferredBackend,includeRects:r?.includeRects===!0,signal:n.signal,boundCapture:e.touchExecutor?.captureSnapshot??e.gestures?.captureSnapshot})}),...B(e,()=>e.contextFromFlags(t,n.appBundleId,n.trace?.outPath)),...e.confirmOffscreenTargetVisible?{confirmOffscreenTargetVisible:async(t,n,r)=>await e.confirmOffscreenTargetVisible(n,r)}:{},...V(e.touchExecutor,e.expireRefFrame,t)}}function B(e,t){let n=e.gestures,r=e.pairedGestureViewport;return n?{resolveGestureViewport:async()=>r??await n.gestureViewport?.(t()),performGesture:async(r,i)=>(e.expireRefFrame(),H(await n.performPlan(i,t())))}:r?{resolveGestureViewport:async()=>r}:{}}function V(e,t,n){if(!e)return{};let{tapPoint:r,tapRef:i,fillPoint:a,fillRef:o,longPressPoint:s,hoverPoint:c,hoverRef:l}=e,u=async e=>(t(),H(await e()));return{tap:r?(e,t)=>u(()=>r(t,n)):void 0,tapTarget:i?(e,t)=>u(()=>i(t.ref)):void 0,fill:a?(e,t,n,r)=>u(()=>a(t,n,r)):void 0,fillTarget:o?(e,t,n,r)=>u(()=>o(t.ref,n,r)):void 0,longPress:s?(e,t,n)=>u(()=>s(t,n?.durationMs)):void 0,hover:c?(e,t)=>u(()=>c(t)):void 0,hoverTarget:l?(e,t)=>u(()=>l(t.ref)):void 0}}function H(e){return e&&typeof e==`object`?e:void 0}function U(e,t,n){return{ok:!1,error:{code:e,message:t,...n?{details:n}:{}}}}function W(e,t){if(!t||t.settle===!0)return null;let n=[];return t.settleQuietMs!==void 0&&n.push(`--settle-quiet`),n.length===0?null:U(`INVALID_ARGS`,`${e}: ${n.join(`, `)} require${n.length===1?`s`:``} --settle.`)}function G(e){if(e?.settle===!0)return{...e.settleQuietMs===void 0?{}:{quietMs:e.settleQuietMs},...e.timeoutMs===void 0?{}:{timeoutMs:e.timeoutMs}}}function K(t){try{return q(t),null}catch(t){if(t instanceof e)return U(t.code,t.message,t.details);throw t}}function q(t){let n=t.ref.startsWith(`@`)?t.ref.slice(1):t.ref,{admission:r,scope:i,currentGeneration:a}=t.frame;if(r.admitted)return;let o=r.reason===`plain_ref_requires_complete_frame`&&i!==`all`&&i.has(n)&&a!==void 0?`@${n}~s${a}`:void 0;throw new e(`COMMAND_FAILED`,Y(r.reason,t.ref),{reason:r.reason,ref:t.ref,currentGeneration:a,scope:i===`all`?`all`:Array.from(i),...t.mintedGeneration===void 0?{}:{mintedGeneration:t.mintedGeneration},...o?{suggestedRef:o}:{},hint:o?`Retry with the exact emitted ref ${o}.`:t.staleRefsWarning??J})}const J=`Capture a fresh interactive snapshot (snapshot -i) or use a stable selector, then retry.`;function Y(e,t){switch(e){case`ref_frame_expired`:return`Ref ${t} belongs to an expired ref frame — a device action since the snapshot invalidated it`;case`ref_generation_mismatch`:return`Ref ${t} was minted from a superseded snapshot generation`;case`plain_ref_requires_complete_frame`:return`Ref ${t} needs a complete snapshot — the current frame only authorizes its emitted refs`;case`ref_not_issued`:return`Ref ${t} was not issued by the current ref frame`}}export{I as a,E as c,W as i,D as l,K as n,L as o,G as r,j as s,q as t};
@@ -1 +1 @@
1
- import{D as e,L as t,O as n,T as r,d as i,o as a,u as o,z as s}from"./sdk-contracts.js";import{p as c}from"./sdk-batch-runner.js";import{b as l,f as u}from"./sdk-device.js";import{C as d,h as f,m as p,p as ee}from"./sdk-batch.js";import{c as te,o as ne}from"./scroll-gesture.js";import{C as m,E as re,S as ie,v as ae,x as h}from"./script.js";import{H as g,L as oe,d as se,n as ce,r as _,t as v,u as le,z as ue}from"./session-snapshot.js";import{N as de,d as y}from"./parameterized-recorded-fill.js";import{m as fe,s as b}from"./runtime.js";import{n as x}from"./catalog.js";import{r as pe}from"./success-text.js";import{i as S,n as me,r as he}from"./click-button.js";import{r as ge,t as _e}from"./interaction-positionals.js";import{r as C}from"./diagnostics.js";import{t as ve}from"./timeouts.js";import"./diagnostics2.js";import"./retry.js";import"./gesture-plan.js";import{r as ye}from"./request-cancel.js";import"./request.js";import{i as be}from"./request-runtime-binding.js";import{n as w,t as T}from"./touch-reference-frame.js";import{c as xe,s as Se}from"./quality-warnings.js";import{i as Ce,r as E}from"./internal/daemon.js";import{r as we}from"./capture-disclosure.js";import{a as Te,c as Ee,i as D,l as De,n as O,o as k,r as A,s as Oe,t as ke}from"./interaction-ref-policy.js";import{t as j}from"./gesture-runtime.js";import{d as Ae,g as M,i as je,r as Me,u as Ne}from"./selector-runtime.js";import{n as Pe}from"./type-text-runtime.js";function Fe(t){let n=t.flags?.recordAs;if(n!==void 0){if(de(n),t.flags?.noRecord)throw new e(`INVALID_ARGS`,`fill --record-as cannot be combined with --no-record because no script step would be published.`);if(!t.isSessionRecording&&!t.replayPlanStep)throw new e(`INVALID_ARGS`,`fill --record-as requires an armed script recording. Start a fresh session with open --save-script, then retry the fill.`)}}async function N(e,t){if(!oe(t))return;let n=t.snapshot?.comparisonSafe===!0?t.snapshot:void 0;try{await e.captureSnapshotForSession(t,e.req.flags,e.sessionStore,e.contextFromFlags,{interactiveOnly:!0,androidFreshnessMode:`ref-refresh`})}catch(t){C({level:`warn`,phase:`android_ref_snapshot_refresh_failed`,data:{command:e.req.command,error:t instanceof Error?t.message:String(t)}})}return n}function P(e,t){return!u(e.device)||e.surface!==`desktop`&&e.surface!==`menubar`||e.surface===`menubar`&&(t===`click`||t===`press`)?null:a(`UNSUPPORTED_OPERATION`,`${t} is not supported on macOS ${e.surface} sessions yet. Open an app session to act, or use the ${e.surface} surface to inspect.`)}const Ie=new Set(f()),Le=new Set([`currentUptimeMs`,`gestureEndUptimeMs`,`gestureStartUptimeMs`,`sequenceResults`]);function F(e){if(e)return Object.fromEntries(Object.entries(e).filter(([e])=>!Le.has(e)))}function Re(e){return Be({fields:ze(e.command),input:e.input??{},data:F(e.data),controlledFields:Ie})}function ze(e){let t=d(e);if(!t)throw Error(`Missing response data transform descriptor for ${e}`);return t.fields}function Be(e){let t=Object.fromEntries(Object.entries(e.data??{}).filter(([t])=>!e.controlledFields.has(t)));for(let[n,r]of Object.entries(e.fields)){let i=e.input[n]===void 0?r.defaultValue:e.input[n];if(i===void 0||r.omitDefault===!0&&i===r.defaultValue){delete t[n];continue}t[n]=i}return Object.fromEntries(Object.entries(t).filter(([,e])=>e!==void 0))}async function Ve(e){let{session:t,flags:n,sessionStore:r,contextFromFlags:i,captureSnapshotForSession:a,observation:o}=e,s=t.screenRecording?.handle;if(!s)return;let c=s.inspect().touchReferenceFrame;if(c)return c;if(t.device.platform===`android`&&!t.lease?.leaseProvider&&!be(t.device)){if(!o)throw Error(`Android observation was not injected into the request`);let e=await o.readScreenSize(t.device),n={referenceWidth:e.width,referenceHeight:e.height};return s.setTouchReferenceFrame(n),n}let l=T(t.snapshot);if(l)return s.setTouchReferenceFrame(l),l;let u=await a(t,n,r,i,{interactiveOnly:!0}),d=T(u);return d&&s.setTouchReferenceFrame(d),d}async function He(e){try{return await Ve(e)}catch(t){C({level:`warn`,phase:`touch_reference_frame_resolve_failed`,data:{platform:e.session.device.platform,error:t instanceof Error?t.message:String(t)}});return}}function I(e){let{data:t,fallbackX:n,fallbackY:r,referenceFrame:i,extra:a}=e,o=We(a,n,r)??(typeof t?.message==`string`?t.message:void 0);return Ue({...t??{},...n===void 0||r===void 0?{}:{x:n,y:r},...i??{},...a??{},...pe(o)})}function Ue(e){return Object.fromEntries(Object.entries(e).filter(([,e])=>e!==void 0))}function We(e,t,n){let r=L(e,`text`);if(r!==void 0)return`Filled ${Array.from(r).length} chars`;let i=Ge(t,n),a=Ke(e);if(a)return Je(a,e??{},i);if(i)return qe(e,i)}function L(e,t){let n=e?.[t];return typeof n==`string`?n:void 0}function Ge(e,t){return e===void 0||t===void 0?``:` (${e}, ${t})`}function Ke(e){let t=L(e,`ref`);return t===void 0?L(e,`selector`):`@${t}`}function qe(e,t){return e?.gesture===`longpress`?`Long pressed${t}`:e?.gesture===`hover`?`Hovered${t}`:`Tapped${t}`}function Je(e,t,n){let r=typeof t.button==`string`?t.button:void 0;return t.gesture===`longpress`?`Long pressed ${e}${n}`:t.gesture===`hover`?`Hovered ${e}${n}`:r&&r!==`primary`?`Clicked ${r} ${e}${n}`:`Tapped ${e}${n}`}function R(e){if(e.length<2)return null;let t=Number(e[0]),n=Number(e[1]);return!Number.isFinite(t)||!Number.isFinite(n)?null:{x:t,y:n}}function z(e,t){let n=R(e);if(n)return{ok:!0,target:{kind:`point`,x:n.x,y:n.y}};let r=e[0]??``;if(r.startsWith(`@`)){let t=M(r);return t.ok?{ok:!0,target:{kind:`ref`,ref:t.ref,fallbackLabel:e.slice(1).join(` `).trim()},refGeneration:t.generation}:{ok:!1,response:t.response}}let i=e.join(` `).trim();return i?{ok:!0,target:{kind:`selector`,selector:i}}:{ok:!1,response:a(`INVALID_ARGS`,`${t} requires @ref, selector expression, or x y coordinates`)}}function Ye(e){let t=R(e);if(t)return{ok:!0,target:{kind:`point`,x:t.x,y:t.y},...tt(e[2])};let n=et(e),r=z(n.targetPositionals,`longpress`);return r.ok?{ok:!0,target:r.target,refGeneration:r.refGeneration,...n.duration}:r}function B(e){return{ok:!1,response:a(`INVALID_ARGS`,`fill requires text after ${e} (use "" to clear the field)`)}}function Xe(e){let t=Ze(e);if(!t)return{ok:!1,response:a(`INVALID_ARGS`,`fill requires x y text, @ref text, or selector text`)};switch(t.kind){case`ref`:{let n=M(e[0]??``);return n.ok?t.text===void 0?B(`ref`):{ok:!0,target:{kind:`ref`,ref:n.ref},refGeneration:n.generation,text:t.text}:{ok:!1,response:n.response}}case`point`:return t.text===void 0?B(`coordinates`):{ok:!0,target:{kind:`point`,x:t.target.x,y:t.target.y},text:t.text};case`selector`:return t.text===void 0||t.text.length>0&&!t.text.trim()?B(`selector`):{ok:!0,target:{kind:`selector`,selector:t.target.selector},text:t.text}}}function Ze(e){try{return _e(e)}catch{return null}}function Qe(e){let t=`evidence`in e?e.evidence:void 0,n=e.settle;return e.kind===`ref`?{ref:ge(e.target?.kind===`ref`?e.target.ref:void 0),refLabel:e.refLabel,selectorChain:e.selectorChain,targetHittable:e.targetHittable,hint:e.hint,evidence:t,settle:n,resolution:e.resolution}:e.kind===`selector`?{selector:e.target?.kind===`selector`?e.target.selector:void 0,selectorChain:e.selectorChain,refLabel:e.refLabel,targetHittable:e.targetHittable,hint:e.hint,evidence:t,settle:n,resolution:e.resolution}:{evidence:t,settle:n}}function $e(e,t){return e.kind===`point`?`coordinate tap`:t.kind===`ref`&&t.target?.kind===`ref`?t.target.ref:t.kind===`selector`&&t.target?.kind===`selector`?t.target.selector:`target`}function et(e){let t=e.at(-1);return e.length>1&&nt(t)?{targetPositionals:e.slice(0,-1),duration:{durationMs:Number(t)}}:{targetPositionals:e,duration:{}}}function tt(e){return e===void 0?{}:{durationMs:Number(e)}}function nt(e){return e===void 0||e.trim()===``?!1:Number.isFinite(Number(e))}const rt={source:`direct-ios`,kind:`not-observed`};function V(e,t){if(!it(e))return t;let{resolution:n,...r}=t;return r}function it(e){return`dispatchPath`in e&&e.dispatchPath===`maestro-non-hittable-fallback`}function H(e){return U({source:{kind:`corroborated-tap`,targetKind:e.targetKind,data:{warning:e.warning},publicData:{warning:e.warning},point:e.point,resolution:e.resolution},referenceFrame:e.referenceFrame,extra:e.extra})}function U(e){let{source:t,referenceFrame:n,extra:r}=e;if(t.kind===`runner-payload`||t.kind===`corroborated-tap`){let e={targetKind:t.targetKind,...V(t,{resolution:t.kind===`runner-payload`?rt:t.resolution}),...r??{}};return{result:I({data:t.data,fallbackX:t.point?.x,fallbackY:t.point?.y,referenceFrame:n,extra:e}),responseData:I({data:t.publicData,fallbackX:t.point?.x,fallbackY:t.point?.y,referenceFrame:n,extra:e})}}let{result:i}=t,a={targetKind:i.kind,...V(t,Qe(i)),...st(i.settle,e.settleRefsGeneration),...r??{}},o=I({data:i.backendResult,fallbackX:i.point?.x,fallbackY:i.point?.y,referenceFrame:n,extra:{...a,...ot(i)}}),s=I({data:t.publicData,fallbackX:i.point?.x,fallbackY:i.point?.y,referenceFrame:n,extra:a}),c=ct(`warning`in i?i.warning:void 0,e.staleRefsWarning);return c&&(o.warning=c,s.warning=c),{result:o,responseData:s,...at(i)}}function at(e){let t=W(e)?.node??(`node`in e?e.node:void 0),n=`preAction`in e?e.preAction?.nodes:void 0;return t&&n?{recordedTarget:{node:t,preActionNodes:n}}:{}}function ot(e){let t=W(e);return t?{selectorChain:t.selectorChain,refLabel:t.refLabel}:{}}function W(e){return`recordingTarget`in e?e.recordingTarget:void 0}function st(e,t){return!e?.diff||t===void 0?{}:{settle:{...e,refsGeneration:t}}}function ct(e,t){return t?e?`${e} ${t}`:t:e}async function lt(e){let{params:t,session:n,result:r,publicData:i,extra:a}=e,o=r.kind===`point`?await He({session:n,flags:t.req.flags,sessionStore:t.sessionStore,contextFromFlags:t.contextFromFlags,captureSnapshotForSession:t.captureSnapshotForSession,observation:t.androidObservation}):w(n.snapshot?.nodes??[]);return U({source:{kind:`runtime`,result:r,publicData:i},referenceFrame:o,extra:a,staleRefsWarning:e.staleRefsWarning,settleRefsGeneration:v(n,r.settle)})}function G(e){return e.command?Re({command:e.command,input:e.flags,data:e.data}):F(e.data)}function ut(e,t){return e===`click`||e===`press`||e===`fill`?e:t}function K(e,t){if(!e)return{used:!1,extra:{}};let n=t?.maestroNonHittableCoordinateFallbackUsed===!0;return{used:n,extra:{maestroNonHittableCoordinateFallbackAllowed:!0,maestroNonHittableCoordinateFallbackUsed:n,...n?{maestroFallbackReason:`non-hittable-coordinate`}:{}}}}function q(e){return[String(e.x),String(e.y)]}function dt(t){let{error:n,snapshotGeneration:r,publishPartialRefs:i}=t;if(n.code!==`AMBIGUOUS_MATCH`)return n;let a=s(n.details);return a.length===0||r===void 0?n:(i(a),new e(n.code,n.message,{...n.details,refsGeneration:r},n.cause))}async function ft(t,n,r){let i=await Ne(t,r);if(i){if(i.permissionDialog)return`press ${n} opened an Android permission dialog (${i.foregroundPackage}) over ${i.expectedPackage}. ${i.hint}`;throw new e(`COMMAND_FAILED`,`press ${n} left ${t.appBundleId} and foregrounded ${i.foregroundPackage}. The tap likely escaped the app.`,i)}}function pt(e){return e.code===`COMMAND_FAILED`&&typeof e.details?.expectedPackage==`string`&&typeof e.details?.foregroundPackage==`string`}async function J(e){if(!mt(e))return;let t=gt(e.session.snapshot);if(!t)return;let n=await _t(e,t.snapshot.snapshotQuality,t.presentation);if(!(!n||!vt(t.snapshot,n,e.command)))return xt(t.snapshot,n,e.command)}function mt(e){return ht(e.command)&&n(e.error).code===`XCTEST_RECORDED_FAILURE`&&Ee(e.session,{skipPendingPostGestureStabilization:!1})}function ht(e){return e===`click`||e===`press`}function gt(e){if(!Y(e))return;let t=Date.now()-e.createdAt;if(t<0||t>15e3){C({level:`debug`,phase:`ios_tap_failure_corroboration_stale_baseline`,data:{ageMs:t}});return}let n=St(e.presentationKey);if(n){if(n.raw){C({level:`debug`,phase:`ios_tap_failure_corroboration_raw_baseline`,data:{presentationKey:e.presentationKey}});return}return{snapshot:e,presentation:n}}}async function _t(e,t,n){try{let r=xe(t);return await e.captureSnapshotForSession(e.session,Dt(e.flags,n),e.sessionStore,e.contextFromFlags,{interactiveOnly:n?.interactiveOnly??!0,...r?{preferredBackend:r}:{},signal:ye(e.requestId)})}catch(t){C({level:`debug`,phase:`ios_tap_failure_corroboration_capture_failed`,data:{command:e.command,error:t instanceof Error?t.message:String(t)}});return}}function vt(e,t,n){let r=yt(e,t);return r===void 0?bt(e,t,n):r?!0:(C({level:`debug`,phase:`ios_tap_failure_corroboration_identity_mismatch`,data:{command:n}}),!1)}function yt(e,t){if(e.comparisonKey!==void 0||t.comparisonKey!==void 0)return e.comparisonKey!==void 0&&e.comparisonKey===t.comparisonKey}function bt(e,t,n){let r=e.snapshotQuality?.backend,i=t.snapshotQuality?.backend;return!r||r!==i?(C({level:`debug`,phase:`ios_tap_failure_corroboration_backend_mismatch`,data:{command:n,baselineBackend:r,afterBackend:i}}),!1):e.presentationKey===t.presentationKey||(C({level:`debug`,phase:`ios_tap_failure_corroboration_scope_mismatch`,data:{command:n,baselinePresentationKey:e.presentationKey,afterPresentationKey:t.presentationKey}}),!1)}function xt(e,t,n){if(!Y(t))return;let r=b(e.nodes),i=b(t.nodes);if(r.digest!==i.digest)return C({level:`warn`,phase:`ios_tap_failure_corroborated`,data:{command:n,beforeNodeCount:r.nodeCount,afterNodeCount:i.nodeCount}}),{warning:`XCTest reported the tap as failed, but a same-scope post-action accessibility capture changed; treating the tap as landed. Observe the current screen before issuing another tap.`}}function Y(e){return!!(e&&e.nodes.length>0&&!Se(e.snapshotQuality))}function St(e){if(!e)return;let t;try{t=JSON.parse(e)}catch{return}return Ct(t)}function Ct(e){let t=wt(e);if(!(!t||typeof t.interactiveOnly!=`boolean`||typeof t.raw!=`boolean`)&&!(!Tt(t.depth)||!Et(t.scope)))return{interactiveOnly:t.interactiveOnly,...typeof t.depth==`number`?{depth:t.depth}:{},...typeof t.scope==`string`?{scope:t.scope}:{},raw:t.raw}}function wt(e){return typeof e==`object`&&e?e:void 0}function Tt(e){return e==null||typeof e==`number`}function Et(e){return e==null||typeof e==`string`}function Dt(e,t){if(!(!e&&!t))return{...e??{},out:void 0,...t?{snapshotDepth:t.depth,snapshotScope:t.scope,snapshotRaw:t.raw}:{}}}function Ot(e){return e.kind===`selector`?{selector:e.selector}:e.kind===`ref`?{ref:e.ref.startsWith(`@`)?e.ref.slice(1):e.ref}:{}}async function kt(e,t,n,r,i){if(e.lease?.leaseProvider)return{aborted:!1,readiness:{status:`clear`},runtimeResult:await r()};let a=await E({session:e,command:t,phase:`before-command`,observation:i});if(n.refContext&&a.status===`recovered`){let t=O({ref:n.refContext.ref,mintedGeneration:n.refContext.mintedGeneration,staleRefsWarning:n.refContext.staleRefsWarning,frame:g({session:e,ref:n.refContext.ref,mintedGeneration:n.refContext.mintedGeneration})});if(t)return{aborted:!0,response:t}}let o=await r();return await E({session:e,command:t,phase:`after-command`,observation:i}),{aborted:!1,readiness:a,runtimeResult:o}}async function X(e,t){let r=e.sessionStore.get(e.sessionName);if(!r)return o();let i=Te({...e,touchExecutor:t.touchExecutor}),a=Date.now();try{let n,o=await kt(r,e.req.command,{refContext:t.refContext},async()=>{let e=await t.run(i);return n=await t.afterRun?.(e),e},e.androidObservation);if(o.aborted)return o.response;let{readiness:s,runtimeResult:c}=o,l=Date.now(),{result:u,responseData:d,recordedTarget:f}=await t.buildPayloads(c),p=[...s.status===`recovered`?[s.warning]:[],...n?[n]:[]];if(p.length>0){let e=[...typeof d.warning==`string`?[d.warning]:[],...p].join(` `);u.warning=e,d.warning=e}return k({session:r,sessionStore:e.sessionStore,command:e.req.command,positionals:e.req.positionals??[],retryPositionals:Nt(e.req.command,c),flags:e.req.flags,result:u,responseData:d,recordedTarget:f,actionStartedAt:a,actionFinishedAt:l,androidFreshnessBaseline:t.androidFreshnessBaseline})}catch(i){let o=dt({error:n(i),snapshotGeneration:r.snapshotGeneration,publishPartialRefs:e=>ce(r,e)});if(pt(o))throw o;return o.code===`AMBIGUOUS_MATCH`?Z(o):await At({error:o,handlerParams:e,session:r,target:t.iosTapCorroboration?.target,extra:t.iosTapCorroboration?.extra,actionStartedAt:a,androidFreshnessBaseline:t.androidFreshnessBaseline})||Z(o)}}async function At(e){if(!e.target)return;let t=fe(e.error);if(!t&&y(e.session))return;let n=await J({error:e.error,command:e.handlerParams.req.command,requestId:e.handlerParams.req.meta?.requestId,flags:e.handlerParams.req.flags,session:e.session,sessionStore:e.handlerParams.sessionStore,contextFromFlags:e.handlerParams.contextFromFlags,captureSnapshotForSession:e.handlerParams.captureSnapshotForSession});if(!n)return;let r=jt({target:e.target,resolvedTarget:t,warning:n.warning,referenceFrame:w(e.session.snapshot?.nodes??[]),extra:e.extra});return k({session:e.session,sessionStore:e.handlerParams.sessionStore,command:e.handlerParams.req.command,positionals:e.handlerParams.req.positionals??[],flags:e.handlerParams.req.flags,result:r.result,responseData:r.responseData,recordedTarget:r.recordedTarget,scheduleInteractionOutcomeRetry:!1,actionStartedAt:e.actionStartedAt,actionFinishedAt:Date.now(),androidFreshnessBaseline:e.androidFreshnessBaseline})}function jt(e){return e.resolvedTarget?U({source:{kind:`runtime`,result:{...e.resolvedTarget,warning:e.warning}},referenceFrame:e.referenceFrame,extra:e.extra}):H({targetKind:e.target.kind,point:Mt(e.target),warning:e.warning,referenceFrame:e.referenceFrame,extra:{...Ot(e.target),...e.extra??{}}})}function Mt(e){return e.kind===`point`?{x:e.x,y:e.y}:void 0}function Z(e){return{ok:!1,error:t(e)}}function Nt(e,t){if(!(t.kind===`ref`&&!t.node)&&(e===`click`||e===`press`))return t.point?q(t.point):void 0}async function Q(e,t,n,r){let i=await se({device:t.device,command:n,requiresCapture:r,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});return i.ok?{ok:!0,touchExecutor:le(i.runtime,e.contextFromFlags(e.req.flags,t.appBundleId,t.trace?.outPath))}:i}async function Pt(e){let{req:t,sessionName:n,sessionStore:r}=e,i=r.get(n);if(i){let e=P(i,`fill`);if(e)return e}if(!i)return o();let a=Xe(t.positionals??[]);if(!a.ok)return a.response;let s=await Q(e,i,`fill`,a.target.kind!==`point`);if(!s.ok)return s.response;let{touchExecutor:c}=s;Fe({flags:t.flags,replayPlanStep:t.internal?.replayPlanStep===!0,isSessionRecording:y(i)});let l=D(`fill`,t.flags);if(l)return l;let u=await Ft(e,i,a.target,a.refGeneration);if(u.response)return u.response;let{staleRefsWarning:d}=u,f=t.internal?.replayTargetGuard;return await X(e,{touchExecutor:c,refContext:a.target.kind===`ref`&&t.internal?.findResolvedTarget===void 0?{ref:a.target.ref,mintedGeneration:a.refGeneration,staleRefsWarning:d}:void 0,run:async e=>await e.interactions.fill(a.target,a.text,{session:n,requestId:t.meta?.requestId,delayMs:t.flags?.delayMs,allowNonHittableCoordinateFallback:t.flags?.maestro?.allowNonHittableCoordinateFallback,verify:t.flags?.verify,settle:A(t.flags),expectedResolvedTarget:f,preresolvedTarget:t.internal?.findResolvedTarget}),buildPayloads:e=>It({session:i,result:e,text:a.text,flags:t.flags,staleRefsWarning:d})})}async function Ft(e,t,n,r){if(n.kind!==`ref`)return{};let i=e.req.internal?.findResolvedTarget===void 0?_({session:t,ref:n.ref,mintedGeneration:r}):void 0,a=e.refSnapshotFlagGuardResponse(`fill`,e.req.flags);if(a)return{response:a,staleRefsWarning:i};let o=e.req.internal?.findResolvedTarget?null:O({ref:n.ref,mintedGeneration:r,staleRefsWarning:i,frame:g({session:t,ref:n.ref,mintedGeneration:r})});return o?{response:o,staleRefsWarning:i}:(await N(e,t),{staleRefsWarning:i})}function It(e){let{session:t,result:n}=e,r=K(e.flags?.maestro?.allowNonHittableCoordinateFallback===!0,n.backendResult),i=n.kind===`point`?void 0:w(t.snapshot?.nodes??[]);return U({source:{kind:`runtime`,result:n,publicData:G({command:`fill`,flags:e.flags,data:n.backendResult}),...r.used?{dispatchPath:`maestro-non-hittable-fallback`}:{}},referenceFrame:i,extra:{text:e.text,...r.extra},staleRefsWarning:e.staleRefsWarning,settleRefsGeneration:v(t,n.settle)})}async function Lt(e,n,r,i){let a=e,o={selector:r.raw},s=Date.now();ue(n);try{let e=await i(r)??{},t=Date.now(),c=zt(e),l=G({command:ut(a.req.command,`press`),flags:a.req.flags,data:e}),u=K(r.allowNonHittableCoordinateFallback===!0,e),{result:d,responseData:f}=U({source:{kind:`runner-payload`,targetKind:`selector`,data:e,publicData:l,point:c,dispatchPath:u.used?`maestro-non-hittable-fallback`:`maestro-direct-selector`},referenceFrame:Bt(e),extra:{...o,...u.extra}});return k({session:n,sessionStore:a.sessionStore,command:a.req.command,positionals:a.req.positionals??[],retryPositionals:q(c),flags:a.req.flags,result:d,responseData:f,actionStartedAt:s,actionFinishedAt:t})}catch(e){return await Rt({error:e,handlerParams:a,session:n,extra:o,positionals:[],actionStartedAt:s})||(Oe(e,{delegateSemanticFailures:r.allowNonHittableCoordinateFallback!==!0})?(C({level:`debug`,phase:`ios_direct_selector_tap_fallback`,data:{selector:r.raw,error:e instanceof Error?e.message:String(e)}}),null):{ok:!1,error:t(e)})}}async function Rt(e){let{error:t,handlerParams:n,session:r,extra:i,positionals:a,actionStartedAt:o}=e,s=await J({error:t,command:n.req.command,requestId:n.req.meta?.requestId,flags:n.req.flags,session:r,sessionStore:n.sessionStore,contextFromFlags:n.contextFromFlags,captureSnapshotForSession:n.captureSnapshotForSession});if(!s)return;let{result:c,responseData:l}=H({targetKind:`selector`,warning:s.warning,resolution:{source:`direct-ios`,kind:`not-observed`},extra:i});return k({session:r,sessionStore:n.sessionStore,command:n.req.command,positionals:n.req.positionals??a,flags:n.req.flags,result:c,responseData:l,scheduleInteractionOutcomeRetry:!1,actionStartedAt:o,actionFinishedAt:Date.now()})}function zt(e){let t=typeof e.x==`number`?e.x:void 0,n=typeof e.y==`number`?e.y:void 0;return t!==void 0&&n!==void 0?{x:t,y:n}:{x:0,y:0}}function Bt(e){return typeof e.referenceWidth==`number`&&typeof e.referenceHeight==`number`?{referenceWidth:e.referenceWidth,referenceHeight:e.referenceHeight}:void 0}function Vt(e){let{session:t,commandLabel:n,target:r,flags:i}=e;return!e.tapElementSelectorAvailable||i?.maestro?.allowNonHittableCoordinateFallback!==!0||n!==`click`||r.kind!==`selector`||y(t)||Wt(i)||p(n)&&i?.verify===!0||ee(n)&&i?.settle===!0?null:Ht(t,r.selector,i)}function Ht(e,t,n){let r=De({session:e,selectorExpression:t});return r?{...r,...n?.maestro?.allowNonHittableCoordinateFallback?{allowNonHittableCoordinateFallback:!0}:{},...n?.maestro?.expectedTapPoint?{expectedPoint:n.maestro.expectedTapPoint}:{}}:null}const Ut=[`count`,`intervalMs`,`holdMs`,`jitterPx`,`doubleTap`];function Wt(e){return Ut.some(t=>e?.[t]!==void 0)?!0:e?.clickButton!==void 0&&e.clickButton!==`primary`}const Gt=new Set([`press`,`click`]);async function Kt(e,t){let{req:n,sessionStore:r,sessionName:i}=e,a=r.get(i);if(!a)return{response:o()};let s=t===`click`?`click`:t,c=qt(a,t,s,n.flags);if(c)return{response:c};let l=n.positionals??[],u=t===`longpress`?Ye(l):z(l,s);if(!u.ok)return{response:u.response};let d=Yt(a,n,u),f=Zt(e,a,t,u,d);if(f.response)return{response:f.response};let p=S(n.flags);return{admitted:{session:a,commandLabel:s,clickButton:p,resultButtonTag:me(p),target:u.target,durationMs:t===`longpress`?u.durationMs:void 0,staleRefsWarning:d,refContext:Xt(n,u,d)}}}function qt(e,t,n,r){return P(e,n)||D(t,r)||Jt(e,t,n,r)}function Jt(e,t,n,r){let i=S(r);if(!Gt.has(t)||i===`primary`)return;let o=he({commandLabel:n,platform:l(e.device),button:i,count:r?.count,intervalMs:r?.intervalMs,holdMs:r?.holdMs,jitterPx:r?.jitterPx,doubleTap:r?.doubleTap});if(o)return a(o.code,o.message,o.details)}function Yt(e,t,n){if(n.target.kind===`ref`&&t.internal?.findResolvedTarget===void 0)return _({session:e,ref:n.target.ref,mintedGeneration:n.refGeneration})}function Xt(e,t,n){if(t.target.kind===`ref`&&e.internal?.findResolvedTarget===void 0)return{ref:t.target.ref,mintedGeneration:t.refGeneration,staleRefsWarning:n}}function Zt(e,t,n,r,i){let{req:a}=e;if(r.target.kind!==`ref`)return{};let o=e.refSnapshotFlagGuardResponse(n===`click`?`press`:n,a.flags);if(o)return{response:o};let s=a.internal?.findResolvedTarget?null:O({ref:r.target.ref,mintedGeneration:r.refGeneration,staleRefsWarning:i,frame:g({session:t,ref:r.target.ref,mintedGeneration:r.refGeneration})});return s?{response:s}:{}}async function $(e,t){let n=await Kt(e,t);if(`response`in n)return n.response;let{admitted:r}=n,i=await Q(e,r.session,t,r.target.kind!==`point`);if(!i.ok)return i.response;let{touchExecutor:a}=i,o=r.target.kind===`ref`?await N(e,r.session):void 0,s={...r,androidFreshnessBaseline:o},c=e.req.internal?.replayTargetGuard?null:Vt({session:s.session,commandLabel:s.commandLabel,target:s.target,flags:e.req.flags,tapElementSelectorAvailable:a.tapElementSelector!==void 0});if(c&&a.tapElementSelector){let t=await Lt(e,s.session,c,a.tapElementSelector);if(t)return t}return await X(e,{...Qt(e,t,s),touchExecutor:a})}function Qt(e,t,n){let{req:r,sessionName:i}=e,{session:a,target:o,durationMs:s,staleRefsWarning:c,resultButtonTag:l}=n,u=t===`longpress`?{...s===void 0?{}:{durationMs:s},gesture:`longpress`}:t===`hover`?{gesture:`hover`}:l;return{androidFreshnessBaseline:n.androidFreshnessBaseline,refContext:n.refContext,iosTapCorroboration:{target:o,extra:u},run:async e=>await $t({runtime:e,command:t,target:o,sessionName:i,requestId:r.meta?.requestId,clickButton:n.clickButton,flags:r.flags,durationMs:s,expectedResolvedTarget:r.internal?.replayTargetGuard,preresolvedTarget:r.internal?.findResolvedTarget}),afterRun:async t=>{if(!a.lease?.leaseProvider)return await ft(a,$e(o,t),e.androidObservation)},buildPayloads:async n=>{let i=tn(n);return await lt({params:e,session:a,result:n,staleRefsWarning:c,publicData:G({command:t===`longpress`||t===`hover`?void 0:t,flags:r.flags,data:n.backendResult}),extra:t===`longpress`?{...i===void 0?{}:{durationMs:i},gesture:`longpress`}:t===`hover`?{gesture:`hover`}:l})}}}async function $t(e){let{runtime:t,command:n,target:r,sessionName:i,requestId:a,flags:o,expectedResolvedTarget:s}=e,c={session:i,requestId:a,settle:A(o),expectedResolvedTarget:s};switch(n){case`longpress`:return await t.interactions.longPress(r,{...c,durationMs:e.durationMs});case`hover`:return await t.interactions.hover(r,c);case`click`:return await t.interactions.click(r,en(e,c));case`press`:return await t.interactions.press(r,en(e,c))}}function en(e,t){let{flags:n}=e;return{...t,button:e.clickButton,count:n?.count,intervalMs:n?.intervalMs,holdMs:n?.holdMs,jitterPx:n?.jitterPx,doubleTap:n?.doubleTap,verify:n?.verify,preresolvedTarget:e.preresolvedTarget}}function tn(e){return`durationMs`in e?e.durationMs:void 0}function nn(e,t={}){let n=typeof t.executionProfile==`string`?t.executionProfile:void 0;return{kind:e.kind,durationMs:e.durationMs,pointerCount:e.pointerCount,from:e.from,to:e.to,...e.kind===`drag`?{targets:e.targets}:{},...e.backendResult??{},...t,...n?{timing:{executionProfile:n,gestureDurationMs:e.durationMs}}:{},message:e.message}}function rn(e){return`refused`in e}async function an(e){return await dn(e,`gesture`,async t=>on(e,t))}async function on(e,t){let n=re(e.req.input),r=pn(n,t);r.intent===`pan`&&e.req.internal?.gestureExecutionProfile&&(r.executionProfile=e.req.internal.gestureExecutionProfile);let i=await j({device:t.device,input:r,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});return i.ok?cn(n,r,await sn(un(e,i.gestures),{session:e.sessionName,requestId:e.req.meta?.requestId},r,e.req.internal),e.req.flags):{refused:i.response}}async function sn(e,t,n,r){if(n.intent!==`drag`)return await e.interactions.gesture({...t,gesture:n});let i=r?.replayTargetGuards??(r?.replayTargetGuard?{source:r.replayTargetGuard}:void 0);return await e.interactions.gesture({...t,gesture:n,...i?{expectedResolvedTargets:i}:{}})}function cn(e,t,n,r){let i=n.kind===`drag`?n.recording:void 0,a=i?.sourceTarget,o=i?.destinationTarget;return{positionals:hn(e,i),flags:Sn(e,r),responseData:nn(n,{executionProfile:fn(t)}),...e.kind===`pinch`?{recordingResultExtra:{scale:e.scale}}:a?{recordingResultExtra:{selectorChain:a.selectorChain}}:{},...a&&o?{recordedTargets:{source:{node:a.node,preActionNodes:a.preActionNodes},destination:{node:o.node,preActionNodes:o.preActionNodes}}}:{}}}async function ln(e){return await dn(e,`swipe`,async t=>{let n=gn(e.req.input),r=await j({device:t.device,input:m(n).gesture,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});if(!r.ok)return{refused:r.response};let i=n.count??1,a=n.pauseMs??0,o=n.pattern??`one-way`,s=await bn(un(e,r.gestures),e,n,i,a,o);return{positionals:yn(n),flags:e.req.flags,responseData:nn(s,{from:n.from,to:n.to,x1:n.from.x,y1:n.from.y,x2:n.to.x,y2:n.to.y,effectiveDurationMs:s.durationMs,timingMode:`direct`,executionProfile:`endpoint-hold`,count:i,pauseMs:a,pattern:o})}})}function un(e,t){return Te({...e,gestures:t,pairedGestureViewport:e.req.internal?.gestureViewport})}async function dn(e,n,r){let i=e.sessionStore.get(e.sessionName);if(!i)return o();let a=Date.now();try{let t=be(i.device),o=t?{status:`clear`}:await E({session:i,command:n,phase:`before-command`,observation:e.androidObservation}),s=await r(i);if(rn(s))return s.refused;t||await E({session:i,command:n,phase:`after-command`,observation:e.androidObservation});let c={...s.responseData};return o.status===`recovered`&&(c.warning=`${typeof c.warning==`string`?`${c.warning} `:``}${o.warning}`),k({session:i,sessionStore:e.sessionStore,command:n,actionCommand:n,positionals:s.positionals,flags:s.flags,result:{...c,...s.recordingResultExtra??{}},responseData:c,recordedTargets:s.recordedTargets,actionStartedAt:a,actionFinishedAt:Date.now()})}catch(e){return{ok:!1,error:t(e)}}}function fn(e){if(e.intent===`fling`)return`endpoint-hold`;if(e.intent===`pan`)return e.executionProfile??`timed-pan`;if(e.intent===`drag`)return`timed-pan`}function pn(e,t){let n=ie(e);return n.intent===`drag`?{...n,source:mn(n.source,t),destination:mn(n.destination,t)}:n}function mn(t,n){if(!t.startsWith(`@`))return t;let a=r(t);if(!a)throw new e(`INVALID_ARGS`,`Invalid ref "${t}" — malformed generation suffix.`,{hint:i});return ke({ref:a.base,mintedGeneration:a.generation,frame:g({session:n,ref:a.base,mintedGeneration:a.generation})}),a.base}function hn(e,t){return e.kind!==`drag`||!t?h(e):h({...e,source:t.sourceSelector??e.source,destination:t.destinationSelector??e.destination})}function gn(t){if(!t||typeof t!=`object`||Array.isArray(t))throw new e(`INVALID_ARGS`,`swipe requires structured object input`);ae(t);let n=t,r=n.pattern;if(r!==void 0&&r!==`one-way`&&r!==`ping-pong`)throw new e(`INVALID_ARGS`,`swipe pattern must be one-way or ping-pong`);let i={from:vn(n.from,`swipe from`),to:vn(n.to,`swipe to`),count:c(n,`count`,{min:1,max:200}),pauseMs:c(n,`pauseMs`,{min:0,max:ne}),pattern:r};return _n(i),i}function _n(t){let n=t.count??1,r=t.pauseMs??0,i=n*100+Math.max(0,n-1)*r;if(!(i<=6e4))throw new e(`INVALID_ARGS`,`Swipe series must fit within ${te}ms.`,{count:n,pauseMs:r,gestureDurationMs:100,scheduledDurationMs:i,hint:`Reduce --count or --pause-ms.`})}function vn(t,n){if(!t||typeof t!=`object`||Array.isArray(t))throw new e(`INVALID_ARGS`,`${n} must be a point`);let r=t;if(typeof r.x!=`number`||!Number.isFinite(r.x))throw new e(`INVALID_ARGS`,`${n} x must be finite`);if(typeof r.y!=`number`||!Number.isFinite(r.y))throw new e(`INVALID_ARGS`,`${n} y must be finite`);return{x:r.x,y:r.y}}function yn(e){return[String(e.from.x),String(e.from.y),String(e.to.x),String(e.to.y)]}async function bn(e,t,n,r,i,a){let o;for(let s=0;s<r;s+=1){let c=m(xn(n,a,s));o=await e.interactions.gesture({session:t.sessionName,requestId:t.req.meta?.requestId,gesture:c.gesture}),i>0&&s+1<r&&await ve(i)}if(!o)throw Error(`Swipe orchestration did not execute a gesture.`);return o}function xn(e,t,n){return t!==`ping-pong`||n%2!=1?e:{...e,from:e.to,to:e.from}}function Sn(e,t){return e.kind!==`pan`||e.pointerCount===void 0?t:{...t,pointerCount:e.pointerCount}}async function Cn(e){let t={},n=await wn({...e,refSnapshotFlagGuardResponse:Ae,activationProof:t});return n&&we(n,t.state)}async function wn(e){switch(e.req.command){case`press`:return await $(e,`press`);case`click`:return await $(e,`click`);case`longpress`:return await $(e,`longpress`);case`hover`:return await $(e,`hover`);case`fill`:return await Pt(e);default:return await Tn(e)}}async function Tn(e){switch(e.req.command){case x.gesture:return await an(e);case x.swipe:return await ln(e);case x.type:return await En(e);case`get`:return await Me(e);case`is`:return await je(e);default:return null}}async function En(e){let{sessionName:t,sessionStore:n}=e,r=n.get(t);if(!r)return o();let i=await Pe({device:r.device,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});if(!i.ok)return i.response;let a=await Dn(r,e.androidObservation);return a.response?a.response:await On(e,r,i.typeText,a.warning)}async function Dn(e,t){if(e.device.platform===`android`&&e.screenRecording){let n=await Ce({session:e,observation:t});if(n.status===`failed`)return{response:a(`COMMAND_FAILED`,`Android system dialog blocked the recording session`)};if(n.status===`unknown`)return{warning:n.warning}}return{}}async function On(e,n,r,i){let{req:a,sessionStore:o}=e,s=Date.now();try{let t=await E({session:n,command:a.command,phase:`before-command`,observation:e.androidObservation});ue(n);let c=await r(a.positionals??[],e.contextFromFlags(a.flags,n.appBundleId,n.trace?.outPath));await E({session:n,command:a.command,phase:`after-command`,observation:e.androidObservation});let l=Date.now(),u={...c};return kn(u,i,t),k({session:n,sessionStore:o,command:a.command,positionals:a.positionals??[],flags:a.flags,result:u,responseData:u,actionStartedAt:s,actionFinishedAt:l})}catch(e){return{ok:!1,error:t(e)}}}function kn(e,t,n){let r=[typeof e.warning==`string`?e.warning:void 0,t];n.status===`recovered`&&r.push(n.warning);let i=r.filter(e=>typeof e==`string`&&e.length>0).join(` `);i.length>0&&(e.warning=i)}export{Cn as handleInteractionCommands};
1
+ import{A as e,B as t,H as n,O as r,f as i,j as a,o,u as s}from"./sdk-contracts.js";import{p as c}from"./sdk-batch-runner.js";import{b as l,f as u}from"./sdk-device.js";import{C as d,h as f,m as p,p as ee}from"./sdk-batch.js";import{c as te,o as ne}from"./scroll-gesture.js";import{C as m,E as re,S as ie,v as ae,x as h}from"./script.js";import{B as g,R as oe,U as _,d as se,n as ce,r as v,t as le,u as ue}from"./session-snapshot.js";import{N as de,d as y}from"./parameterized-recorded-fill.js";import{m as fe,s as b}from"./runtime.js";import{n as x}from"./catalog.js";import{r as pe}from"./success-text.js";import{i as S,n as me,r as he}from"./click-button.js";import{r as ge,t as _e}from"./interaction-positionals.js";import{r as C}from"./diagnostics.js";import{t as ve}from"./timeouts.js";import"./diagnostics2.js";import"./retry.js";import"./gesture-plan.js";import{r as ye}from"./request-cancel.js";import"./request.js";import{i as be}from"./request-runtime-binding.js";import{n as w,t as T}from"./touch-reference-frame.js";import{c as xe,s as Se}from"./quality-warnings.js";import{i as Ce,r as E}from"./internal/daemon.js";import{n as we}from"./capture-disclosure.js";import{a as Te,c as Ee,i as D,l as De,n as O,o as k,r as A,s as Oe,t as ke}from"./interaction-ref-policy.js";import{t as j}from"./gesture-runtime.js";import{d as Ae,g as M,i as je,r as Me,u as Ne}from"./selector-runtime.js";import{n as Pe}from"./type-text-runtime.js";function Fe(t){let n=t.flags?.recordAs;if(n!==void 0){if(de(n),t.flags?.noRecord)throw new e(`INVALID_ARGS`,`fill --record-as cannot be combined with --no-record because no script step would be published.`);if(!t.isSessionRecording&&!t.replayPlanStep)throw new e(`INVALID_ARGS`,`fill --record-as requires an armed script recording. Start a fresh session with open --save-script, then retry the fill.`)}}async function N(e,t){if(!oe(t))return;let n=t.snapshot?.comparisonSafe===!0?t.snapshot:void 0;try{await e.captureSnapshotForSession(t,e.req.flags,e.sessionStore,e.contextFromFlags,{interactiveOnly:!0,androidFreshnessMode:`ref-refresh`})}catch(t){C({level:`warn`,phase:`android_ref_snapshot_refresh_failed`,data:{command:e.req.command,error:t instanceof Error?t.message:String(t)}})}return n}function P(e,t){return!u(e.device)||e.surface!==`desktop`&&e.surface!==`menubar`||e.surface===`menubar`&&(t===`click`||t===`press`)?null:o(`UNSUPPORTED_OPERATION`,`${t} is not supported on macOS ${e.surface} sessions yet. Open an app session to act, or use the ${e.surface} surface to inspect.`)}const Ie=new Set(f()),Le=new Set([`currentUptimeMs`,`gestureEndUptimeMs`,`gestureStartUptimeMs`,`sequenceResults`]);function F(e){if(e)return Object.fromEntries(Object.entries(e).filter(([e])=>!Le.has(e)))}function Re(e){return Be({fields:ze(e.command),input:e.input??{},data:F(e.data),controlledFields:Ie})}function ze(e){let t=d(e);if(!t)throw Error(`Missing response data transform descriptor for ${e}`);return t.fields}function Be(e){let t=Object.fromEntries(Object.entries(e.data??{}).filter(([t])=>!e.controlledFields.has(t)));for(let[n,r]of Object.entries(e.fields)){let i=e.input[n]===void 0?r.defaultValue:e.input[n];if(i===void 0||r.omitDefault===!0&&i===r.defaultValue){delete t[n];continue}t[n]=i}return Object.fromEntries(Object.entries(t).filter(([,e])=>e!==void 0))}async function Ve(e){let{session:t,flags:n,sessionStore:r,contextFromFlags:i,captureSnapshotForSession:a,observation:o}=e,s=t.screenRecording?.handle;if(!s)return;let c=s.inspect().touchReferenceFrame;if(c)return c;if(t.device.platform===`android`&&!t.lease?.leaseProvider&&!be(t.device)){if(!o)throw Error(`Android observation was not injected into the request`);let e=await o.readScreenSize(t.device),n={referenceWidth:e.width,referenceHeight:e.height};return s.setTouchReferenceFrame(n),n}let l=T(t.snapshot);if(l)return s.setTouchReferenceFrame(l),l;let u=await a(t,n,r,i,{interactiveOnly:!0}),d=T(u);return d&&s.setTouchReferenceFrame(d),d}async function He(e){try{return await Ve(e)}catch(t){C({level:`warn`,phase:`touch_reference_frame_resolve_failed`,data:{platform:e.session.device.platform,error:t instanceof Error?t.message:String(t)}});return}}function I(e){let{data:t,fallbackX:n,fallbackY:r,referenceFrame:i,extra:a}=e,o=We(a,n,r)??(typeof t?.message==`string`?t.message:void 0);return Ue({...t??{},...n===void 0||r===void 0?{}:{x:n,y:r},...i??{},...a??{},...pe(o)})}function Ue(e){return Object.fromEntries(Object.entries(e).filter(([,e])=>e!==void 0))}function We(e,t,n){let r=L(e,`text`);if(r!==void 0)return`Filled ${Array.from(r).length} chars`;let i=Ge(t,n),a=Ke(e);if(a)return Je(a,e??{},i);if(i)return qe(e,i)}function L(e,t){let n=e?.[t];return typeof n==`string`?n:void 0}function Ge(e,t){return e===void 0||t===void 0?``:` (${e}, ${t})`}function Ke(e){let t=L(e,`ref`);return t===void 0?L(e,`selector`):`@${t}`}function qe(e,t){return e?.gesture===`longpress`?`Long pressed${t}`:e?.gesture===`hover`?`Hovered${t}`:`Tapped${t}`}function Je(e,t,n){let r=typeof t.button==`string`?t.button:void 0;return t.gesture===`longpress`?`Long pressed ${e}${n}`:t.gesture===`hover`?`Hovered ${e}${n}`:r&&r!==`primary`?`Clicked ${r} ${e}${n}`:`Tapped ${e}${n}`}function R(e){if(e.length<2)return null;let t=Number(e[0]),n=Number(e[1]);return!Number.isFinite(t)||!Number.isFinite(n)?null:{x:t,y:n}}function z(e,t){let n=R(e);if(n)return{ok:!0,target:{kind:`point`,x:n.x,y:n.y}};let r=e[0]??``;if(r.startsWith(`@`)){let t=M(r);return t.ok?{ok:!0,target:{kind:`ref`,ref:t.ref,fallbackLabel:e.slice(1).join(` `).trim()},refGeneration:t.generation}:{ok:!1,response:t.response}}let i=e.join(` `).trim();return i?{ok:!0,target:{kind:`selector`,selector:i}}:{ok:!1,response:o(`INVALID_ARGS`,`${t} requires @ref, selector expression, or x y coordinates`)}}function Ye(e){let t=R(e);if(t)return{ok:!0,target:{kind:`point`,x:t.x,y:t.y},...tt(e[2])};let n=et(e),r=z(n.targetPositionals,`longpress`);return r.ok?{ok:!0,target:r.target,refGeneration:r.refGeneration,...n.duration}:r}function B(e){return{ok:!1,response:o(`INVALID_ARGS`,`fill requires text after ${e} (use "" to clear the field)`)}}function Xe(e){let t=Ze(e);if(!t)return{ok:!1,response:o(`INVALID_ARGS`,`fill requires x y text, @ref text, or selector text`)};switch(t.kind){case`ref`:{let n=M(e[0]??``);return n.ok?t.text===void 0?B(`ref`):{ok:!0,target:{kind:`ref`,ref:n.ref},refGeneration:n.generation,text:t.text}:{ok:!1,response:n.response}}case`point`:return t.text===void 0?B(`coordinates`):{ok:!0,target:{kind:`point`,x:t.target.x,y:t.target.y},text:t.text};case`selector`:return t.text===void 0||t.text.length>0&&!t.text.trim()?B(`selector`):{ok:!0,target:{kind:`selector`,selector:t.target.selector},text:t.text}}}function Ze(e){try{return _e(e)}catch{return null}}function Qe(e){let t=`evidence`in e?e.evidence:void 0,n=e.settle;return e.kind===`ref`?{ref:ge(e.target?.kind===`ref`?e.target.ref:void 0),refLabel:e.refLabel,selectorChain:e.selectorChain,targetHittable:e.targetHittable,hint:e.hint,evidence:t,settle:n,resolution:e.resolution}:e.kind===`selector`?{selector:e.target?.kind===`selector`?e.target.selector:void 0,selectorChain:e.selectorChain,refLabel:e.refLabel,targetHittable:e.targetHittable,hint:e.hint,evidence:t,settle:n,resolution:e.resolution}:{evidence:t,settle:n}}function $e(e,t){return e.kind===`point`?`coordinate tap`:t.kind===`ref`&&t.target?.kind===`ref`?t.target.ref:t.kind===`selector`&&t.target?.kind===`selector`?t.target.selector:`target`}function et(e){let t=e.at(-1);return e.length>1&&nt(t)?{targetPositionals:e.slice(0,-1),duration:{durationMs:Number(t)}}:{targetPositionals:e,duration:{}}}function tt(e){return e===void 0?{}:{durationMs:Number(e)}}function nt(e){return e===void 0||e.trim()===``?!1:Number.isFinite(Number(e))}const rt={source:`direct-ios`,kind:`not-observed`};function V(e,t){if(!it(e))return t;let{resolution:n,...r}=t;return r}function it(e){return`dispatchPath`in e&&e.dispatchPath===`maestro-non-hittable-fallback`}function H(e){return U({source:{kind:`corroborated-tap`,targetKind:e.targetKind,data:{warning:e.warning},publicData:{warning:e.warning},point:e.point,resolution:e.resolution},referenceFrame:e.referenceFrame,extra:e.extra})}function U(e){let{source:t,referenceFrame:n,extra:r}=e;if(t.kind===`runner-payload`||t.kind===`corroborated-tap`){let e={targetKind:t.targetKind,...V(t,{resolution:t.kind===`runner-payload`?rt:t.resolution}),...r??{}};return{result:I({data:t.data,fallbackX:t.point?.x,fallbackY:t.point?.y,referenceFrame:n,extra:e}),responseData:I({data:t.publicData,fallbackX:t.point?.x,fallbackY:t.point?.y,referenceFrame:n,extra:e})}}let{result:i}=t,a={targetKind:i.kind,...V(t,Qe(i)),...st(i.settle,e.settleRefsGeneration),...r??{}},o=I({data:i.backendResult,fallbackX:i.point?.x,fallbackY:i.point?.y,referenceFrame:n,extra:{...a,...ot(i)}}),s=I({data:t.publicData,fallbackX:i.point?.x,fallbackY:i.point?.y,referenceFrame:n,extra:a}),c=ct(`warning`in i?i.warning:void 0,e.staleRefsWarning);return c&&(o.warning=c,s.warning=c),{result:o,responseData:s,...at(i)}}function at(e){let t=W(e)?.node??(`node`in e?e.node:void 0),n=`preAction`in e?e.preAction?.nodes:void 0;return t&&n?{recordedTarget:{node:t,preActionNodes:n}}:{}}function ot(e){let t=W(e);return t?{selectorChain:t.selectorChain,refLabel:t.refLabel}:{}}function W(e){return`recordingTarget`in e?e.recordingTarget:void 0}function st(e,t){return!e?.diff||t===void 0?{}:{settle:{...e,refsGeneration:t}}}function ct(e,t){return t?e?`${e} ${t}`:t:e}async function lt(e){let{params:t,session:n,result:r,publicData:i,extra:a}=e,o=r.kind===`point`?await He({session:n,flags:t.req.flags,sessionStore:t.sessionStore,contextFromFlags:t.contextFromFlags,captureSnapshotForSession:t.captureSnapshotForSession,observation:t.androidObservation}):w(n.snapshot?.nodes??[]);return U({source:{kind:`runtime`,result:r,publicData:i},referenceFrame:o,extra:a,staleRefsWarning:e.staleRefsWarning,settleRefsGeneration:le(n,r.settle)})}function G(e){return e.command?Re({command:e.command,input:e.flags,data:e.data}):F(e.data)}function ut(e,t){return e===`click`||e===`press`||e===`fill`?e:t}function K(e,t){if(!e)return{used:!1,extra:{}};let n=t?.maestroNonHittableCoordinateFallbackUsed===!0;return{used:n,extra:{maestroNonHittableCoordinateFallbackAllowed:!0,maestroNonHittableCoordinateFallbackUsed:n,...n?{maestroFallbackReason:`non-hittable-coordinate`}:{}}}}function q(e){return[String(e.x),String(e.y)]}function dt(t){let{error:r,snapshotGeneration:i,publishPartialRefs:a}=t;if(r.code!==`AMBIGUOUS_MATCH`)return r;let o=n(r.details);return o.length===0||i===void 0?r:(a(o),new e(r.code,r.message,{...r.details,refsGeneration:i},r.cause))}async function ft(t,n,r){let i=await Ne(t,r);if(i){if(i.permissionDialog)return`press ${n} opened an Android permission dialog (${i.foregroundPackage}) over ${i.expectedPackage}. ${i.hint}`;throw new e(`COMMAND_FAILED`,`press ${n} left ${t.appBundleId} and foregrounded ${i.foregroundPackage}. The tap likely escaped the app.`,i)}}function pt(e){return e.code===`COMMAND_FAILED`&&typeof e.details?.expectedPackage==`string`&&typeof e.details?.foregroundPackage==`string`}async function J(e){if(!mt(e))return;let t=gt(e.session.snapshot);if(!t)return;let n=await _t(e,t.snapshot.snapshotQuality,t.presentation);if(!(!n||!vt(t.snapshot,n,e.command)))return xt(t.snapshot,n,e.command)}function mt(e){return ht(e.command)&&a(e.error).code===`XCTEST_RECORDED_FAILURE`&&Ee(e.session,{skipPendingPostGestureStabilization:!1})}function ht(e){return e===`click`||e===`press`}function gt(e){if(!Y(e))return;let t=Date.now()-e.createdAt;if(t<0||t>15e3){C({level:`debug`,phase:`ios_tap_failure_corroboration_stale_baseline`,data:{ageMs:t}});return}let n=St(e.presentationKey);if(n){if(n.raw){C({level:`debug`,phase:`ios_tap_failure_corroboration_raw_baseline`,data:{presentationKey:e.presentationKey}});return}return{snapshot:e,presentation:n}}}async function _t(e,t,n){try{let r=xe(t);return await e.captureSnapshotForSession(e.session,Dt(e.flags,n),e.sessionStore,e.contextFromFlags,{interactiveOnly:n?.interactiveOnly??!0,...r?{preferredBackend:r}:{},signal:ye(e.requestId)})}catch(t){C({level:`debug`,phase:`ios_tap_failure_corroboration_capture_failed`,data:{command:e.command,error:t instanceof Error?t.message:String(t)}});return}}function vt(e,t,n){let r=yt(e,t);return r===void 0?bt(e,t,n):r?!0:(C({level:`debug`,phase:`ios_tap_failure_corroboration_identity_mismatch`,data:{command:n}}),!1)}function yt(e,t){if(e.comparisonKey!==void 0||t.comparisonKey!==void 0)return e.comparisonKey!==void 0&&e.comparisonKey===t.comparisonKey}function bt(e,t,n){let r=e.snapshotQuality?.backend,i=t.snapshotQuality?.backend;return!r||r!==i?(C({level:`debug`,phase:`ios_tap_failure_corroboration_backend_mismatch`,data:{command:n,baselineBackend:r,afterBackend:i}}),!1):e.presentationKey===t.presentationKey||(C({level:`debug`,phase:`ios_tap_failure_corroboration_scope_mismatch`,data:{command:n,baselinePresentationKey:e.presentationKey,afterPresentationKey:t.presentationKey}}),!1)}function xt(e,t,n){if(!Y(t))return;let r=b(e.nodes),i=b(t.nodes);if(r.digest!==i.digest)return C({level:`warn`,phase:`ios_tap_failure_corroborated`,data:{command:n,beforeNodeCount:r.nodeCount,afterNodeCount:i.nodeCount}}),{warning:`XCTest reported the tap as failed, but a same-scope post-action accessibility capture changed; treating the tap as landed. Observe the current screen before issuing another tap.`}}function Y(e){return!!(e&&e.nodes.length>0&&!Se(e.snapshotQuality))}function St(e){if(!e)return;let t;try{t=JSON.parse(e)}catch{return}return Ct(t)}function Ct(e){let t=wt(e);if(!(!t||typeof t.interactiveOnly!=`boolean`||typeof t.raw!=`boolean`)&&!(!Tt(t.depth)||!Et(t.scope)))return{interactiveOnly:t.interactiveOnly,...typeof t.depth==`number`?{depth:t.depth}:{},...typeof t.scope==`string`?{scope:t.scope}:{},raw:t.raw}}function wt(e){return typeof e==`object`&&e?e:void 0}function Tt(e){return e==null||typeof e==`number`}function Et(e){return e==null||typeof e==`string`}function Dt(e,t){if(!(!e&&!t))return{...e??{},out:void 0,...t?{snapshotDepth:t.depth,snapshotScope:t.scope,snapshotRaw:t.raw}:{}}}function Ot(e){return e.kind===`selector`?{selector:e.selector}:e.kind===`ref`?{ref:e.ref.startsWith(`@`)?e.ref.slice(1):e.ref}:{}}async function kt(e,t,n,r,i){if(e.lease?.leaseProvider)return{aborted:!1,readiness:{status:`clear`},runtimeResult:await r()};let a=await E({session:e,command:t,phase:`before-command`,observation:i});if(n.refContext&&a.status===`recovered`){let t=O({ref:n.refContext.ref,mintedGeneration:n.refContext.mintedGeneration,staleRefsWarning:n.refContext.staleRefsWarning,frame:_({session:e,ref:n.refContext.ref,mintedGeneration:n.refContext.mintedGeneration})});if(t)return{aborted:!0,response:t}}let o=await r();return await E({session:e,command:t,phase:`after-command`,observation:i}),{aborted:!1,readiness:a,runtimeResult:o}}async function X(e,t){let n=e.sessionStore.get(e.sessionName);if(!n)return s();let r=Te({...e,touchExecutor:t.touchExecutor}),i=Date.now();try{let a,o=await kt(n,e.req.command,{refContext:t.refContext},async()=>{let e=await t.run(r);return a=await t.afterRun?.(e),e},e.androidObservation);if(o.aborted)return o.response;let{readiness:s,runtimeResult:c}=o,l=Date.now(),{result:u,responseData:d,recordedTarget:f}=await t.buildPayloads(c),p=[...s.status===`recovered`?[s.warning]:[],...a?[a]:[]];if(p.length>0){let e=[...typeof d.warning==`string`?[d.warning]:[],...p].join(` `);u.warning=e,d.warning=e}return k({session:n,sessionStore:e.sessionStore,command:e.req.command,positionals:e.req.positionals??[],retryPositionals:Nt(e.req.command,c),flags:e.req.flags,result:u,responseData:d,recordedTarget:f,actionStartedAt:i,actionFinishedAt:l,androidFreshnessBaseline:t.androidFreshnessBaseline})}catch(r){let o=dt({error:a(r),snapshotGeneration:n.snapshotGeneration,publishPartialRefs:e=>ce(n,e)});if(pt(o))throw o;return o.code===`AMBIGUOUS_MATCH`?Z(o):await At({error:o,handlerParams:e,session:n,target:t.iosTapCorroboration?.target,extra:t.iosTapCorroboration?.extra,actionStartedAt:i,androidFreshnessBaseline:t.androidFreshnessBaseline})||Z(o)}}async function At(e){if(!e.target)return;let t=fe(e.error);if(!t&&y(e.session))return;let n=await J({error:e.error,command:e.handlerParams.req.command,requestId:e.handlerParams.req.meta?.requestId,flags:e.handlerParams.req.flags,session:e.session,sessionStore:e.handlerParams.sessionStore,contextFromFlags:e.handlerParams.contextFromFlags,captureSnapshotForSession:e.handlerParams.captureSnapshotForSession});if(!n)return;let r=jt({target:e.target,resolvedTarget:t,warning:n.warning,referenceFrame:w(e.session.snapshot?.nodes??[]),extra:e.extra});return k({session:e.session,sessionStore:e.handlerParams.sessionStore,command:e.handlerParams.req.command,positionals:e.handlerParams.req.positionals??[],flags:e.handlerParams.req.flags,result:r.result,responseData:r.responseData,recordedTarget:r.recordedTarget,scheduleInteractionOutcomeRetry:!1,actionStartedAt:e.actionStartedAt,actionFinishedAt:Date.now(),androidFreshnessBaseline:e.androidFreshnessBaseline})}function jt(e){return e.resolvedTarget?U({source:{kind:`runtime`,result:{...e.resolvedTarget,warning:e.warning}},referenceFrame:e.referenceFrame,extra:e.extra}):H({targetKind:e.target.kind,point:Mt(e.target),warning:e.warning,referenceFrame:e.referenceFrame,extra:{...Ot(e.target),...e.extra??{}}})}function Mt(e){return e.kind===`point`?{x:e.x,y:e.y}:void 0}function Z(e){return{ok:!1,error:t(e)}}function Nt(e,t){if(!(t.kind===`ref`&&!t.node)&&(e===`click`||e===`press`))return t.point?q(t.point):void 0}async function Q(e,t,n,r){let i=await se({device:t.device,command:n,requiresCapture:r,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});return i.ok?{ok:!0,touchExecutor:ue(i.runtime,e.contextFromFlags(e.req.flags,t.appBundleId,t.trace?.outPath))}:i}async function Pt(e){let{req:t,sessionName:n,sessionStore:r}=e,i=r.get(n);if(i){let e=P(i,`fill`);if(e)return e}if(!i)return s();let a=Xe(t.positionals??[]);if(!a.ok)return a.response;let o=await Q(e,i,`fill`,a.target.kind!==`point`);if(!o.ok)return o.response;let{touchExecutor:c}=o;Fe({flags:t.flags,replayPlanStep:t.internal?.replayPlanStep===!0,isSessionRecording:y(i)});let l=D(`fill`,t.flags);if(l)return l;let u=await Ft(e,i,a.target,a.refGeneration);if(u.response)return u.response;let{staleRefsWarning:d}=u,f=t.internal?.replayTargetGuard;return await X(e,{touchExecutor:c,refContext:a.target.kind===`ref`&&t.internal?.findResolvedTarget===void 0?{ref:a.target.ref,mintedGeneration:a.refGeneration,staleRefsWarning:d}:void 0,run:async e=>await e.interactions.fill(a.target,a.text,{session:n,requestId:t.meta?.requestId,delayMs:t.flags?.delayMs,allowNonHittableCoordinateFallback:t.flags?.maestro?.allowNonHittableCoordinateFallback,verify:t.flags?.verify,settle:A(t.flags),expectedResolvedTarget:f,preresolvedTarget:t.internal?.findResolvedTarget}),buildPayloads:e=>It({session:i,result:e,text:a.text,flags:t.flags,staleRefsWarning:d})})}async function Ft(e,t,n,r){if(n.kind!==`ref`)return{};let i=e.req.internal?.findResolvedTarget===void 0?v({session:t,ref:n.ref,mintedGeneration:r}):void 0,a=e.refSnapshotFlagGuardResponse(`fill`,e.req.flags);if(a)return{response:a,staleRefsWarning:i};let o=e.req.internal?.findResolvedTarget?null:O({ref:n.ref,mintedGeneration:r,staleRefsWarning:i,frame:_({session:t,ref:n.ref,mintedGeneration:r})});return o?{response:o,staleRefsWarning:i}:(await N(e,t),{staleRefsWarning:i})}function It(e){let{session:t,result:n}=e,r=K(e.flags?.maestro?.allowNonHittableCoordinateFallback===!0,n.backendResult),i=n.kind===`point`?void 0:w(t.snapshot?.nodes??[]);return U({source:{kind:`runtime`,result:n,publicData:G({command:`fill`,flags:e.flags,data:n.backendResult}),...r.used?{dispatchPath:`maestro-non-hittable-fallback`}:{}},referenceFrame:i,extra:{text:e.text,...r.extra},staleRefsWarning:e.staleRefsWarning,settleRefsGeneration:le(t,n.settle)})}async function Lt(e,n,r,i){let a=e,o={selector:r.raw},s=Date.now();g(n);try{let e=await i(r)??{},t=Date.now(),c=zt(e),l=G({command:ut(a.req.command,`press`),flags:a.req.flags,data:e}),u=K(r.allowNonHittableCoordinateFallback===!0,e),{result:d,responseData:f}=U({source:{kind:`runner-payload`,targetKind:`selector`,data:e,publicData:l,point:c,dispatchPath:u.used?`maestro-non-hittable-fallback`:`maestro-direct-selector`},referenceFrame:Bt(e),extra:{...o,...u.extra}});return k({session:n,sessionStore:a.sessionStore,command:a.req.command,positionals:a.req.positionals??[],retryPositionals:q(c),flags:a.req.flags,result:d,responseData:f,actionStartedAt:s,actionFinishedAt:t})}catch(e){return await Rt({error:e,handlerParams:a,session:n,extra:o,positionals:[],actionStartedAt:s})||(Oe(e,{delegateSemanticFailures:r.allowNonHittableCoordinateFallback!==!0})?(C({level:`debug`,phase:`ios_direct_selector_tap_fallback`,data:{selector:r.raw,error:e instanceof Error?e.message:String(e)}}),null):{ok:!1,error:t(e)})}}async function Rt(e){let{error:t,handlerParams:n,session:r,extra:i,positionals:a,actionStartedAt:o}=e,s=await J({error:t,command:n.req.command,requestId:n.req.meta?.requestId,flags:n.req.flags,session:r,sessionStore:n.sessionStore,contextFromFlags:n.contextFromFlags,captureSnapshotForSession:n.captureSnapshotForSession});if(!s)return;let{result:c,responseData:l}=H({targetKind:`selector`,warning:s.warning,resolution:{source:`direct-ios`,kind:`not-observed`},extra:i});return k({session:r,sessionStore:n.sessionStore,command:n.req.command,positionals:n.req.positionals??a,flags:n.req.flags,result:c,responseData:l,scheduleInteractionOutcomeRetry:!1,actionStartedAt:o,actionFinishedAt:Date.now()})}function zt(e){let t=typeof e.x==`number`?e.x:void 0,n=typeof e.y==`number`?e.y:void 0;return t!==void 0&&n!==void 0?{x:t,y:n}:{x:0,y:0}}function Bt(e){return typeof e.referenceWidth==`number`&&typeof e.referenceHeight==`number`?{referenceWidth:e.referenceWidth,referenceHeight:e.referenceHeight}:void 0}function Vt(e){let{session:t,commandLabel:n,target:r,flags:i}=e;return!e.tapElementSelectorAvailable||i?.maestro?.allowNonHittableCoordinateFallback!==!0||n!==`click`||r.kind!==`selector`||y(t)||Wt(i)||p(n)&&i?.verify===!0||ee(n)&&i?.settle===!0?null:Ht(t,r.selector,i)}function Ht(e,t,n){let r=De({session:e,selectorExpression:t});return r?{...r,...n?.maestro?.allowNonHittableCoordinateFallback?{allowNonHittableCoordinateFallback:!0}:{},...n?.maestro?.expectedTapPoint?{expectedPoint:n.maestro.expectedTapPoint}:{}}:null}const Ut=[`count`,`intervalMs`,`holdMs`,`jitterPx`,`doubleTap`];function Wt(e){return Ut.some(t=>e?.[t]!==void 0)?!0:e?.clickButton!==void 0&&e.clickButton!==`primary`}const Gt=new Set([`press`,`click`]);async function Kt(e,t){let{req:n,sessionStore:r,sessionName:i}=e,a=r.get(i);if(!a)return{response:s()};let o=t===`click`?`click`:t,c=qt(a,t,o,n.flags);if(c)return{response:c};let l=n.positionals??[],u=t===`longpress`?Ye(l):z(l,o);if(!u.ok)return{response:u.response};let d=Yt(a,n,u),f=Zt(e,a,t,u,d);if(f.response)return{response:f.response};let p=S(n.flags);return{admitted:{session:a,commandLabel:o,clickButton:p,resultButtonTag:me(p),target:u.target,durationMs:t===`longpress`?u.durationMs:void 0,staleRefsWarning:d,refContext:Xt(n,u,d)}}}function qt(e,t,n,r){return P(e,n)||D(t,r)||Jt(e,t,n,r)}function Jt(e,t,n,r){let i=S(r);if(!Gt.has(t)||i===`primary`)return;let a=he({commandLabel:n,platform:l(e.device),button:i,count:r?.count,intervalMs:r?.intervalMs,holdMs:r?.holdMs,jitterPx:r?.jitterPx,doubleTap:r?.doubleTap});if(a)return o(a.code,a.message,a.details)}function Yt(e,t,n){if(n.target.kind===`ref`&&t.internal?.findResolvedTarget===void 0)return v({session:e,ref:n.target.ref,mintedGeneration:n.refGeneration})}function Xt(e,t,n){if(t.target.kind===`ref`&&e.internal?.findResolvedTarget===void 0)return{ref:t.target.ref,mintedGeneration:t.refGeneration,staleRefsWarning:n}}function Zt(e,t,n,r,i){let{req:a}=e;if(r.target.kind!==`ref`)return{};let o=e.refSnapshotFlagGuardResponse(n===`click`?`press`:n,a.flags);if(o)return{response:o};let s=a.internal?.findResolvedTarget?null:O({ref:r.target.ref,mintedGeneration:r.refGeneration,staleRefsWarning:i,frame:_({session:t,ref:r.target.ref,mintedGeneration:r.refGeneration})});return s?{response:s}:{}}async function $(e,t){let n=await Kt(e,t);if(`response`in n)return n.response;let{admitted:r}=n,i=await Q(e,r.session,t,r.target.kind!==`point`);if(!i.ok)return i.response;let{touchExecutor:a}=i,o=r.target.kind===`ref`?await N(e,r.session):void 0,s={...r,androidFreshnessBaseline:o},c=e.req.internal?.replayTargetGuard?null:Vt({session:s.session,commandLabel:s.commandLabel,target:s.target,flags:e.req.flags,tapElementSelectorAvailable:a.tapElementSelector!==void 0});if(c&&a.tapElementSelector){let t=await Lt(e,s.session,c,a.tapElementSelector);if(t)return t}return await X(e,{...Qt(e,t,s),touchExecutor:a})}function Qt(e,t,n){let{req:r,sessionName:i}=e,{session:a,target:o,durationMs:s,staleRefsWarning:c,resultButtonTag:l}=n,u=t===`longpress`?{...s===void 0?{}:{durationMs:s},gesture:`longpress`}:t===`hover`?{gesture:`hover`}:l;return{androidFreshnessBaseline:n.androidFreshnessBaseline,refContext:n.refContext,iosTapCorroboration:{target:o,extra:u},run:async e=>await $t({runtime:e,command:t,target:o,sessionName:i,requestId:r.meta?.requestId,clickButton:n.clickButton,flags:r.flags,durationMs:s,expectedResolvedTarget:r.internal?.replayTargetGuard,preresolvedTarget:r.internal?.findResolvedTarget}),afterRun:async t=>{if(!a.lease?.leaseProvider)return await ft(a,$e(o,t),e.androidObservation)},buildPayloads:async n=>{let i=tn(n);return await lt({params:e,session:a,result:n,staleRefsWarning:c,publicData:G({command:t===`longpress`||t===`hover`?void 0:t,flags:r.flags,data:n.backendResult}),extra:t===`longpress`?{...i===void 0?{}:{durationMs:i},gesture:`longpress`}:t===`hover`?{gesture:`hover`}:l})}}}async function $t(e){let{runtime:t,command:n,target:r,sessionName:i,requestId:a,flags:o,expectedResolvedTarget:s}=e,c={session:i,requestId:a,settle:A(o),expectedResolvedTarget:s};switch(n){case`longpress`:return await t.interactions.longPress(r,{...c,durationMs:e.durationMs});case`hover`:return await t.interactions.hover(r,c);case`click`:return await t.interactions.click(r,en(e,c));case`press`:return await t.interactions.press(r,en(e,c))}}function en(e,t){let{flags:n}=e;return{...t,button:e.clickButton,count:n?.count,intervalMs:n?.intervalMs,holdMs:n?.holdMs,jitterPx:n?.jitterPx,doubleTap:n?.doubleTap,verify:n?.verify,preresolvedTarget:e.preresolvedTarget}}function tn(e){return`durationMs`in e?e.durationMs:void 0}function nn(e,t={}){let n=typeof t.executionProfile==`string`?t.executionProfile:void 0;return{kind:e.kind,durationMs:e.durationMs,pointerCount:e.pointerCount,from:e.from,to:e.to,...e.kind===`drag`?{targets:e.targets}:{},...e.backendResult??{},...t,...n?{timing:{executionProfile:n,gestureDurationMs:e.durationMs}}:{},message:e.message}}function rn(e){return`refused`in e}async function an(e){return await dn(e,`gesture`,async t=>on(e,t))}async function on(e,t){let n=re(e.req.input),r=pn(n,t);r.intent===`pan`&&e.req.internal?.gestureExecutionProfile&&(r.executionProfile=e.req.internal.gestureExecutionProfile);let i=await j({device:t.device,input:r,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});return i.ok?cn(n,r,await sn(un(e,i.gestures),{session:e.sessionName,requestId:e.req.meta?.requestId},r,e.req.internal),e.req.flags):{refused:i.response}}async function sn(e,t,n,r){if(n.intent!==`drag`)return await e.interactions.gesture({...t,gesture:n});let i=r?.replayTargetGuards??(r?.replayTargetGuard?{source:r.replayTargetGuard}:void 0);return await e.interactions.gesture({...t,gesture:n,...i?{expectedResolvedTargets:i}:{}})}function cn(e,t,n,r){let i=n.kind===`drag`?n.recording:void 0,a=i?.sourceTarget,o=i?.destinationTarget;return{positionals:hn(e,i),flags:Sn(e,r),responseData:nn(n,{executionProfile:fn(t)}),...e.kind===`pinch`?{recordingResultExtra:{scale:e.scale}}:a?{recordingResultExtra:{selectorChain:a.selectorChain}}:{},...a&&o?{recordedTargets:{source:{node:a.node,preActionNodes:a.preActionNodes},destination:{node:o.node,preActionNodes:o.preActionNodes}}}:{}}}async function ln(e){return await dn(e,`swipe`,async t=>{let n=gn(e.req.input),r=await j({device:t.device,input:m(n).gesture,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});if(!r.ok)return{refused:r.response};let i=n.count??1,a=n.pauseMs??0,o=n.pattern??`one-way`,s=await bn(un(e,r.gestures),e,n,i,a,o);return{positionals:yn(n),flags:e.req.flags,responseData:nn(s,{from:n.from,to:n.to,x1:n.from.x,y1:n.from.y,x2:n.to.x,y2:n.to.y,effectiveDurationMs:s.durationMs,timingMode:`direct`,executionProfile:`endpoint-hold`,count:i,pauseMs:a,pattern:o})}})}function un(e,t){return Te({...e,gestures:t,pairedGestureViewport:e.req.internal?.gestureViewport})}async function dn(e,n,r){let i=e.sessionStore.get(e.sessionName);if(!i)return s();let a=Date.now();try{let t=be(i.device),o=t?{status:`clear`}:await E({session:i,command:n,phase:`before-command`,observation:e.androidObservation}),s=await r(i);if(rn(s))return s.refused;t||await E({session:i,command:n,phase:`after-command`,observation:e.androidObservation});let c={...s.responseData};return o.status===`recovered`&&(c.warning=`${typeof c.warning==`string`?`${c.warning} `:``}${o.warning}`),k({session:i,sessionStore:e.sessionStore,command:n,actionCommand:n,positionals:s.positionals,flags:s.flags,result:{...c,...s.recordingResultExtra??{}},responseData:c,recordedTargets:s.recordedTargets,actionStartedAt:a,actionFinishedAt:Date.now()})}catch(e){return{ok:!1,error:t(e)}}}function fn(e){if(e.intent===`fling`)return`endpoint-hold`;if(e.intent===`pan`)return e.executionProfile??`timed-pan`;if(e.intent===`drag`)return`timed-pan`}function pn(e,t){let n=ie(e);return n.intent===`drag`?{...n,source:mn(n.source,t),destination:mn(n.destination,t)}:n}function mn(t,n){if(!t.startsWith(`@`))return t;let a=r(t);if(!a)throw new e(`INVALID_ARGS`,`Invalid ref "${t}" — malformed generation suffix.`,{hint:i});return ke({ref:a.base,mintedGeneration:a.generation,frame:_({session:n,ref:a.base,mintedGeneration:a.generation})}),a.base}function hn(e,t){return e.kind!==`drag`||!t?h(e):h({...e,source:t.sourceSelector??e.source,destination:t.destinationSelector??e.destination})}function gn(t){if(!t||typeof t!=`object`||Array.isArray(t))throw new e(`INVALID_ARGS`,`swipe requires structured object input`);ae(t);let n=t,r=n.pattern;if(r!==void 0&&r!==`one-way`&&r!==`ping-pong`)throw new e(`INVALID_ARGS`,`swipe pattern must be one-way or ping-pong`);let i={from:vn(n.from,`swipe from`),to:vn(n.to,`swipe to`),count:c(n,`count`,{min:1,max:200}),pauseMs:c(n,`pauseMs`,{min:0,max:ne}),pattern:r};return _n(i),i}function _n(t){let n=t.count??1,r=t.pauseMs??0,i=n*100+Math.max(0,n-1)*r;if(!(i<=6e4))throw new e(`INVALID_ARGS`,`Swipe series must fit within ${te}ms.`,{count:n,pauseMs:r,gestureDurationMs:100,scheduledDurationMs:i,hint:`Reduce --count or --pause-ms.`})}function vn(t,n){if(!t||typeof t!=`object`||Array.isArray(t))throw new e(`INVALID_ARGS`,`${n} must be a point`);let r=t;if(typeof r.x!=`number`||!Number.isFinite(r.x))throw new e(`INVALID_ARGS`,`${n} x must be finite`);if(typeof r.y!=`number`||!Number.isFinite(r.y))throw new e(`INVALID_ARGS`,`${n} y must be finite`);return{x:r.x,y:r.y}}function yn(e){return[String(e.from.x),String(e.from.y),String(e.to.x),String(e.to.y)]}async function bn(e,t,n,r,i,a){let o;for(let s=0;s<r;s+=1){let c=m(xn(n,a,s));o=await e.interactions.gesture({session:t.sessionName,requestId:t.req.meta?.requestId,gesture:c.gesture}),i>0&&s+1<r&&await ve(i)}if(!o)throw Error(`Swipe orchestration did not execute a gesture.`);return o}function xn(e,t,n){return t!==`ping-pong`||n%2!=1?e:{...e,from:e.to,to:e.from}}function Sn(e,t){return e.kind!==`pan`||e.pointerCount===void 0?t:{...t,pointerCount:e.pointerCount}}async function Cn(e){let t={},n=await wn({...e,refSnapshotFlagGuardResponse:Ae,captureProof:t});return n&&we({response:n,consumedTree:t,captureProof:t})}async function wn(e){switch(e.req.command){case`press`:return await $(e,`press`);case`click`:return await $(e,`click`);case`longpress`:return await $(e,`longpress`);case`hover`:return await $(e,`hover`);case`fill`:return await Pt(e);default:return await Tn(e)}}async function Tn(e){switch(e.req.command){case x.gesture:return await an(e);case x.swipe:return await ln(e);case x.type:return await En(e);case`get`:return await Me(e);case`is`:return await je(e);default:return null}}async function En(e){let{sessionName:t,sessionStore:n}=e,r=n.get(t);if(!r)return s();let i=await Pe({device:r.device,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});if(!i.ok)return i.response;let a=await Dn(r,e.androidObservation);return a.response?a.response:await On(e,r,i.typeText,a.warning)}async function Dn(e,t){if(e.device.platform===`android`&&e.screenRecording){let n=await Ce({session:e,observation:t});if(n.status===`failed`)return{response:o(`COMMAND_FAILED`,`Android system dialog blocked the recording session`)};if(n.status===`unknown`)return{warning:n.warning}}return{}}async function On(e,n,r,i){let{req:a,sessionStore:o}=e,s=Date.now();try{let t=await E({session:n,command:a.command,phase:`before-command`,observation:e.androidObservation});g(n);let c=await r(a.positionals??[],e.contextFromFlags(a.flags,n.appBundleId,n.trace?.outPath));await E({session:n,command:a.command,phase:`after-command`,observation:e.androidObservation});let l=Date.now(),u={...c};return kn(u,i,t),k({session:n,sessionStore:o,command:a.command,positionals:a.positionals??[],flags:a.flags,result:u,responseData:u,actionStartedAt:s,actionFinishedAt:l})}catch(e){return{ok:!1,error:t(e)}}}function kn(e,t,n){let r=[typeof e.warning==`string`?e.warning:void 0,t];n.status===`recovered`&&r.push(n.warning);let i=r.filter(e=>typeof e==`string`&&e.length>0).join(` `);i.length>0&&(e.warning=i)}export{Cn as handleInteractionCommands};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime.js";import{D as t}from"./sdk-contracts.js";var n=e({localInteractorSource:()=>i,providerInteractorSource:()=>a,requireInteractorMethod:()=>r});function r(e,n){if(e)return e;throw new t(`COMMAND_FAILED`,`${n} was admitted but its bound interactor has no implementation.`,{reason:`interactor-method-missing`})}function i(e){return async t=>await e.resolveInteractor(e.device,t)}function a(e){return async n=>{let r=e.resolveInteractor(n);if(r)return r;throw new t(`UNSUPPORTED_OPERATION`,`Provider-owned ${e.operation} operation has no bound provider interactor.`,{reason:`provider-runtime-interactor-missing`,deviceId:e.device.id})}}export{r as i,i as n,a as r,n as t};
1
+ import{r as e}from"./rolldown-runtime.js";import{A as t}from"./sdk-contracts.js";var n=e({localInteractorSource:()=>i,providerInteractorSource:()=>a,requireInteractorMethod:()=>r});function r(e,n){if(e)return e;throw new t(`COMMAND_FAILED`,`${n} was admitted but its bound interactor has no implementation.`,{reason:`interactor-method-missing`})}function i(e){return async t=>await e.resolveInteractor(e.device,t)}function a(e){return async n=>{let r=e.resolveInteractor(n);if(r)return r;throw new t(`UNSUPPORTED_OPERATION`,`Provider-owned ${e.operation} operation has no bound provider interactor.`,{reason:`provider-runtime-interactor-missing`,deviceId:e.device.id})}}export{r as i,i as n,a as r,n as t};
@@ -1,5 +1,5 @@
1
- import{D as e,v as t}from"./sdk-contracts.js";import{i as n}from"./capture.js";import{D as r}from"./sdk-batch-runner.js";import{T as i,_ as a,d as o,f as s,u as c,w as l}from"./sdk-device.js";import{r as ee}from"./snapshot-scope.js";import{d as te,i as ne,l as re}from"./scroll-gesture.js";import{a as ie,n as u}from"./alert-contract.js";import{_ as d,b as ae,m as f,n as oe,r as p,v as se,x as ce,y as le}from"./location-coordinates.js";import{c as ue,n as de,t as fe}from"./scroll-command.js";import"./device.js";import{t as pe}from"./device-rotation.js";import{c as me,r as m}from"./diagnostics.js";import{a as h}from"./exec.js";import{t as he}from"./timeouts.js";import{a as ge}from"./tv-remote.js";import"./diagnostics2.js";import"./command.js";import{i as _e,n as ve}from"./retry.js";import{a as ye}from"./gesture-plan.js";import{n as be}from"./scoped-provider.js";import{n as xe,r as Se}from"./ios-snapshot-planning.js";import{a as Ce,l as we,n as Te,s as Ee}from"./quality-warnings.js";import{a as g,o as De,t as Oe}from"./runner-presentation.js";import{n as ke,r as Ae}from"./ios-system-surface.js";import{r as _}from"./ios-snapshot-acquisition.js";import{t as je}from"./png-size.js";import{n as Me}from"./screenshot-density.js";import{n as Ne}from"./interactor-types.js";import{C as Pe,g as Fe,r as v}from"./host-file.js";import{c as y,d as Ie,f as Le,m as Re,p as ze}from"./config.js";import{o as Be}from"./tool-provider.js";import{n as b,r as x,t as Ve}from"./physical-device-control.js";import{i as He,n as Ue,r as We,s as Ge}from"./runner.js";import{l as Ke}from"./host.js";import{t as qe}from"./runner-cache-metadata.js";import{a as S,n as Je}from"./simctl.js";import{c as C}from"./runner-client.js";import"./runner-error-classification.js";import{n as Ye,r as Xe,t as w}from"./app-launch.js";import{r as T,t as E}from"./simulator.js";import{a as Ze,d as Qe,f as $e,g as et,h as D,m as tt,p as nt}from"./app-resolution.js";import{a as rt,i as it,o as at}from"./helper.js";import{i as ot,t as st}from"./display-inventory.js";import{n as ct}from"./multitouch-support.js";import{t as lt}from"./surface-snapshot.js";import{t as ut}from"./ios-target-activation.js";import O from"node:path";async function dt(e){return s(e)?await Qe():(T(e,`clipboard`),await E(e),h(await S(e,[`pbpaste`,e.id],{allowFailure:!0}),`Failed to read iOS simulator clipboard`).stdout.replaceAll(`\r
1
+ import{A as e,G as t,b as n,x as r}from"./sdk-contracts.js";import{i}from"./capture.js";import{D as a}from"./sdk-batch-runner.js";import{T as o,_ as s,d as c,f as l,u as ee,w as te}from"./sdk-device.js";import{Hr as ne}from"./sdk-batch.js";import{d as re,i as ie,l as ae}from"./scroll-gesture.js";import{n as u}from"./session.js";import{a as d,n as f}from"./alert-contract.js";import{S as oe,_ as p,b as se,g as ce,n as m,p as le,v as ue,x as de,y as h}from"./settings.js";import{n as fe}from"./location-coordinates.js";import{c as pe,n as me,t as he}from"./scroll-command.js";import"./device.js";import{t as ge}from"./device-rotation.js";import{c as _e,r as g}from"./diagnostics.js";import{a as _}from"./exec.js";import{t as ve}from"./timeouts.js";import{a as ye}from"./tv-remote.js";import"./diagnostics2.js";import"./command.js";import{i as be,n as v}from"./retry.js";import{a as y}from"./gesture-plan.js";import{n as xe}from"./scoped-provider.js";import{n as Se,r as Ce}from"./ios-snapshot-planning.js";import{a as we,l as Te,n as Ee,s as De}from"./quality-warnings.js";import{i as Oe,n as ke,r as b}from"./ios-snapshot-engine.js";import{n as Ae,r as je}from"./ios-system-surface.js";import{r as x}from"./ios-snapshot-acquisition.js";import{t as Me}from"./png-size.js";import{n as Ne}from"./screenshot-density.js";import{n as Pe}from"./interactor-types.js";import{C as Fe,g as Ie,r as Le}from"./host-file.js";import{c as Re,d as ze,f as Be,m as Ve,p as He}from"./config.js";import{o as Ue}from"./tool-provider.js";import{n as We,r as S,t as Ge}from"./physical-device-control.js";import{i as Ke,n as C,r as w,s as qe}from"./runner.js";import{l as Je}from"./host.js";import{t as Ye}from"./runner-cache-metadata.js";import{a as T,n 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{a as et,i as tt,o as nt}from"./helper.js";import{a as rt,d as it,f as at,p as ot}from"./app-resolution.js";import{i as st,t as ct}from"./display-inventory.js";import{n as lt}from"./multitouch-support.js";import{t as ut}from"./surface-snapshot.js";import{t as dt}from"./ios-target-activation.js";import k from"node:path";async function ft(e){return l(e)?await it():(D(e,`clipboard`),await O(e),_(await T(e,[`pbpaste`,e.id],{allowFailure:!0}),`Failed to read iOS simulator clipboard`).stdout.replaceAll(`\r
2
2
  `,`
3
- `).replace(/\n$/,``))}async function ft(e,t){if(s(e)){await nt(t);return}T(e,`clipboard`),await E(e),h(await S(e,[`pbcopy`,e.id],{allowFailure:!0,stdin:t}),`Failed to write iOS simulator clipboard`)}function pt(t){if(!c(t))throw new e(`UNSUPPORTED_OPERATION`,p.message,{deviceId:t.id,appleOs:l(t),deviceKind:t.kind,reason:p.reason,hint:p.hint})}async function mt(e,t){pt(e);let n=le(t);return await S(e,[`ui`,e.id,`content_size`,n]),ce(n,n)}async function ht(t){pt(t),await E(t);let n=h(await S(t,[`ui`,t.id,`content_size`],{allowFailure:!0}),`Failed to read iOS content size category`),r=n.stdout.trim(),i=ae(r);if(i===void 0)throw new e(`COMMAND_FAILED`,`iOS simulator reported an unknown text size: ${r||`(empty)`}`,{deviceId:t.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 ce(i,r)}const gt=[`--time`,`9:41`,`--dataNetwork`,`wifi`,`--wifiMode`,`active`,`--wifiBars`,`3`,`--batteryState`,`charged`,`--batteryLevel`,`100`],_t={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`},vt={1:`searching`,2:`failed`,3:`active`},yt={0:`notSupported`,1:`searching`,2:`failed`,3:`active`},k=new Set;async function bt(e){let t=null,n=!1;if(St(e))n=!0;else try{t=await Ct(e),n=!0}catch(t){F(e,`snapshot_failed`,t)}try{(!n||t)&&await N(e),await P(e,gt)}catch(t){F(e,`prepare_failed`,t)}return async()=>{await xt(e,n?t:null)}}async function xt(e,t){if(await N(e),!t){j(e);return}await P(e,Tt(t)),A(e)}function A(e){k.delete(M(e))}function j(e){k.add(M(e))}function St(e){return k.has(M(e))}function M(e){return`${e.platform}:${e.kind}:${e.id}`}async function Ct(e){return wt(h(await S(e,[`status_bar`,e.id,`list`],{allowFailure:!0}),`Failed to read simulator status bar overrides`).stdout)}async function N(e){await S(e,[`status_bar`,e.id,`clear`])}async function P(e,t){t.length!==0&&await S(e,[`status_bar`,e.id,`override`,...t])}function wt(t){let n={},r=t.split(`
4
- `).map(e=>e.trim()).filter(e=>e.length>0&&e!==`Current Status Bar Overrides:`&&!/^=+$/.test(e));for(let t of r){let r=/^DataNetworkType:\s+(\d+)$/.exec(t);if(r){let t=Number(r[1]),i=_t[t];if(!i)throw new e(`COMMAND_FAILED`,`Unsupported simulator data network type: ${t}`);n.dataNetwork=i;continue}let i=/^WiFi Mode:\s+(\d+),\s+WiFi Bars:\s+(\d+)$/.exec(t);if(i){let e=vt[Number(i[1])];e&&(n.wifiMode=e),n.wifiBars=i[2];continue}let a=/^Cell Mode:\s+(\d+),\s+Cell Bars:\s+(\d+)$/.exec(t);if(a){let t=Number(a[1]),r=yt[t];if(!r)throw new e(`COMMAND_FAILED`,`Unsupported simulator cellular mode: ${t}`);n.cellularMode=r,n.cellularBars=a[2];continue}let o=/^Operator Name:\s*(.*)$/.exec(t);if(o){n.operatorName=o[1]??``;continue}}return Object.keys(n).length===0?null:n}function Tt(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||Et(e.dataNetwork)||e.operatorName!==void 0)&&t.push(`--cellularBars`,e.cellularBars),e.operatorName!==void 0&&t.push(`--operatorName`,e.operatorName),t}function Et(e){return!!(e&&e!==`hide`&&e!==`wifi`)}function F(e,t,n){m({level:`warn`,phase:`ios_screenshot_status_bar_${t}`,data:{platform:e.platform,deviceKind:e.kind,deviceId:e.id,...x(n)}})}async function Dt(t,n,r,i,a){if(s(t)){let t=n.toLowerCase();if(t===`appearance`){await $e(r);return}if(t===`permission`){let t=d(r);if(t===`deny`)throw new e(`INVALID_ARGS`,f(`permission`));let n=jt(a?.permissionTarget);return await rt(t,n)}throw new e(`INVALID_ARGS`,f(n))}T(t,`settings`),await E(t);let o=n.toLowerCase();switch(o){case`clear-app-state`:{if(r.toLowerCase()!==`clear`)throw new e(`INVALID_ARGS`,`settings clear-app-state only supports clear.`);if(!i)throw new e(`INVALID_ARGS`,`settings clear-app-state requires an app id or an active app session.`);let n=await At(t,i);return{bundleId:n.bundleId,containerPath:n.containerPath,cleared:!0}}case`reset-keychain`:if(r.toLowerCase()!==`clear`)throw new e(`INVALID_ARGS`,`settings reset-keychain only supports clear.`);return await S(t,[`keychain`,t.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=D(r)?`active`:`failed`;await S(t,[`status_bar`,t.id,`override`,`--wifiMode`,e]),A(t);return}case`airplane`:D(r)?(await S(t,[`status_bar`,t.id,`override`,`--dataNetwork`,`hide`,`--wifiMode`,`failed`,`--wifiBars`,`0`,`--cellularMode`,`failed`,`--cellularBars`,`0`,`--operatorName`,``]),A(t)):(await S(t,[`status_bar`,t.id,`clear`]),j(t));return;case`location`:{if(r.toLowerCase()===`set`){let{latitude:e,longitude:n}=oe(a);return await S(t,[`location`,t.id,`set`,`${e},${n}`]),{latitude:e,longitude:n}}let n=D(r);if(!i)throw new e(`INVALID_ARGS`,`location setting requires an active app in session`);let o=n?`grant`:`revoke`;await S(t,[`privacy`,t.id,o,`location`,i]);return}case`faceid`:case`touchid`:{let e=o,n=Pt[e];await Ht(t,Vt(r,e),{settingName:e,label:n.label,modalityAliases:n.modalityAliases});return}case`appearance`:{let e=await Mt(t,r);await S(t,[`ui`,t.id,`appearance`,e]);return}case`text-size`:return await mt(t,r);case`permission`:if(!i)throw new e(`INVALID_ARGS`,`permission setting requires an active app in session`);await It(t,Ft(d(r)),Bt(a?.permissionTarget,a?.permissionMode),i);return;default:throw new e(`INVALID_ARGS`,`Unsupported setting: ${n}`)}}const Ot={"text-size":ht};async function kt(e,t){return await Ot[t](e)}async function At(t,n){if(!o(t)||t.kind!==`simulator`)throw new e(`UNSUPPORTED_OPERATION`,`Clearing app state is currently supported only on iOS simulators.`);let r=await Ze(t,n);await E(t),await w(t,r);let i=h(await S(t,[`get_app_container`,t.id,r,`data`],{allowFailure:!0}),`simctl get_app_container failed for ${r}`).stdout.trim();if(!i)throw new e(`COMMAND_FAILED`,`simctl get_app_container returned an empty data container path for ${r}`);let a=await Fe(i);return await Promise.all(a.map(e=>Pe(O.join(i,e)))),{bundleId:r,containerPath:i}}function jt(t){let n=t?.trim().toLowerCase();if(n===`accessibility`||n===`screen-recording`||n===`input-monitoring`)return n;throw new e(`INVALID_ARGS`,`Unsupported macOS permission target. Use accessibility|screen-recording|input-monitoring.`)}async function Mt(t,n){let r=tt(n);if(r!==`toggle`)return r;let i=h(await S(t,[`ui`,t.id,`appearance`],{allowFailure:!0}),`Failed to read current iOS appearance`),a=Nt(i.stdout,i.stderr);if(!a)throw new e(`COMMAND_FAILED`,`Unable to determine current iOS appearance for toggle`,{stdout:i.stdout,stderr:i.stderr});return a===`dark`?`light`:`dark`}function Nt(e,t){let n=/\b(light|dark|unsupported|unknown)\b/i.exec(`${e}\n${t}`);if(!n)return null;let r=n[1]?.toLowerCase();return r===`dark`?`dark`:r===`light`?`light`:null}const Pt={faceid:{label:`Face ID`,modalityAliases:[`face`]},touchid:{label:`Touch ID`,modalityAliases:[`finger`,`touch`]}};function Ft(e){return e===`deny`?`revoke`:e}async function It(e,t,n,r){try{await S(e,[`privacy`,e.id,t,n,r])}catch(i){throw Lt(i)?Rt(e,t,n,r,i):i}}function Lt(t){if(!(t instanceof e)||t.code!==`COMMAND_FAILED`)return!1;let n=String(t.details?.stderr??``).toLowerCase();return/failed to (set|grant|revoke|reset) access/.test(n)&&n.includes(`operation not permitted`)}function Rt(t,n,r,i,a){return n===`reset`?new e(`UNSUPPORTED_OPERATION`,`iOS simulator does not support resetting ${r} permission via simctl privacy on this runtime.`,{deviceId:t.id,appBundleId:i,hint:`Use reinstall to force a fresh prompt, or reset simulator content and settings.`},a):new e(`UNSUPPORTED_OPERATION`,`iOS simulator does not support setting ${r} permission via simctl privacy on this runtime.`,{deviceId:t.id,appBundleId:i,hint:"Privacy support varies by Xcode runtime: run `xcrun simctl privacy help` for its documented services, or use the `all` target, which applies the action to every service this runtime can change."},a)}const zt={all:`all`,camera:`camera`,microphone:`microphone`,contacts:`contacts`,"contacts-limited":`contacts-limited`,notifications:`notifications`,calendar:`calendar`,location:`location`,"location-always":`location-always`,"media-library":`media-library`,motion:`motion`,reminders:`reminders`,siri:`siri`};function Bt(t,n){let r=se(t);if(r===`photos`){let t=n?.trim().toLowerCase();if(!t||t===`full`)return`photos`;if(t===`limited`)return`photos-add`;throw new e(`INVALID_ARGS`,`Invalid photos mode: ${n}. Use full|limited.`)}if(n?.trim())throw new e(`INVALID_ARGS`,`Permission mode is only supported for photos. Received: ${n}.`);return zt[r]}function Vt(t,n){let r=t.trim().toLowerCase();if(r===`match`)return`match`;if(r===`nonmatch`)return`nonmatch`;if(r===`enroll`)return`enroll`;if(r===`unenroll`)return`unenroll`;throw new e(`INVALID_ARGS`,`Invalid ${n} state: ${t}. Use match|nonmatch|enroll|unenroll.`)}async function Ht(t,n,r){let i=Ut(t.id,n,r.modalityAliases),a=[];for(let e of i){let n=Je(t,e),r=await Be(n,{allowFailure:!0});if(r.exitCode===0)return;a.push({args:n,stderr:r.stderr,stdout:r.stdout,exitCode:r.exitCode})}let o=et(a);throw a.length>0&&a.every(e=>Wt(e.stdout,e.stderr))?new e(`UNSUPPORTED_OPERATION`,`${r.label} simulation is not supported on this simulator runtime.`,{deviceId:t.id,action:n,setting:r.settingName,attempts:o}):new e(`COMMAND_FAILED`,`Failed to simulate ${r.settingName}.`,{deviceId:t.id,action:n,setting:r.settingName,attempts:o})}function Ut(e,t,n){let r=n.length>0?n:[`face`];switch(t){case`match`:return r.flatMap(t=>[[`biometric`,e,`match`,t],[`biometric`,`match`,e,t]]);case`nonmatch`:return r.flatMap(t=>[[`biometric`,e,`nonmatch`,t],[`biometric`,e,`nomatch`,t],[`biometric`,`nonmatch`,e,t],[`biometric`,`nomatch`,e,t]]);case`enroll`:return[[`biometric`,e,`enroll`,`yes`],[`biometric`,e,`enroll`,`1`],[`biometric`,`enroll`,e,`yes`],[`biometric`,`enroll`,e,`1`]];case`unenroll`:return[[`biometric`,e,`enroll`,`no`],[`biometric`,e,`enroll`,`0`],[`biometric`,`enroll`,e,`no`],[`biometric`,`enroll`,e,`0`]]}}function Wt(e,t){let n=`${e}\n${t}`.toLowerCase();return n.includes(`unrecognized subcommand`)||n.includes(`unknown subcommand`)||n.includes(`not supported`)||n.includes(`unavailable`)||n.includes(`biometric`)&&n.includes(`invalid`)}function Gt(e){let t=e.screenshotMetadata;if(!t||typeof t!=`object`||Array.isArray(t))return;let n=t,r=I(n.displayID),i=I(n.pixelWidth),a=I(n.pixelHeight),o=Kt(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 I(e){return typeof e==`number`&&Number.isInteger(e)&&e>0?e:void 0}function Kt(e){return typeof e==`number`&&Number.isFinite(e)&&e>0?e:void 0}const qt={ensureBooted:E,prepareStatusBarForScreenshot:bt,resolveCaptureDisplay:ot,captureWithRetry:Xt,normalizeDensity:nn,captureWithRunner:z,shouldFallbackToRunner:H},L=new Map,R=new Map;async function Jt(e,t,n={}){if(s(e)){await z(e,t,n.appBundleId,n.fullscreen,n.runnerOptions);return}if(e.kind===`simulator`){await Yt(e,t,n);return}await Ve(e).captureScreenshot(e,t,{appBundleId:n.appBundleId,fullscreen:n.fullscreen,runnerOptions:n.runnerOptions,runRunnerCommand:C})}async function Yt(t,n,r={}){if(t.kind!==`simulator`)throw new e(`UNSUPPORTED_OPERATION`,`Simulator screenshot fallback flow supports only iOS simulators`);let i={...qt,...r.deps??{}};r.skipIosSimulatorBootCheck||await i.ensureBooted(t);let a=await i.resolveCaptureDisplay(t),o=async()=>{await i.captureWithRetry(t,n,a),await i.normalizeDensity(t,n,r.pixelDensity,a?.pointScale)},s=async()=>{};if(r.normalizeStatusBar===!0)try{s=await i.prepareStatusBarForScreenshot(t)}catch(e){V(t,`prepare_failed`,e)}try{try{await o();return}catch(e){let n=e;if(r.skipIosSimulatorBootCheck&&tn(e)){await i.ensureBooted(t);try{await o();return}catch(e){n=e}}if(!i.shouldFallbackToRunner(n))throw n;$t(t,`simctl_screenshot`,n)}let e=await i.captureWithRunner(t,n,r.appBundleId,r.fullscreen,r.runnerOptions);await i.normalizeDensity(t,n,r.pixelDensity,e?.pixelsPerPoint)}finally{await s().catch(e=>V(t,`restore_failed`,e))}}async function Xt(e,t,n){let r=ve.fromTimeoutMs(Re),i=[`io`,e.id,`screenshot`,...st(n),t];await _e(async({deadline:t})=>{await S(e,i,{timeoutMs:Math.max(1e3,t?.remainingMs()??2e4)})},{maxAttempts:5,baseDelayMs:Ie,maxDelayMs:Le,jitter:.2,shouldRetry:e=>H(e)},{deadline:r,phase:`ios_simulator_screenshot`})}async function z(t,n,r,i,a){if(t.kind===`device`&&!s(t)){await Ve(t).captureScreenshot(t,n,{appBundleId:r,fullscreen:i,runnerOptions:a,preferRunner:!0,runRunnerCommand:C});return}let o=await C(t,{command:`screenshot`,appBundleId:r,fullscreen:i,inlineScreenshot:!1},a),c=o.message;if(!c)throw new e(`COMMAND_FAILED`,`Failed to capture iOS screenshot: runner returned no file path`);let l=Gt(o);if(s(t))return await v(c,n),l;if(t.kind===`simulator`)return await Zt(t,c,n),l;throw new e(`COMMAND_FAILED`,`Unsupported Apple screenshot target`)}async function Zt(t,n,r){let i=ve.fromTimeoutMs(y),a=`Unable to locate runner container for simulator screenshot`,o=R.get(t.id);if(o){let e=await B(o,n,r);if(e.copied)return;a=e.error,R.delete(t.id)}for(let e of qe){let o=await S(t,[`get_app_container`,t.id,e,`data`],{allowFailure:!0,timeoutMs:Qt(i,y,`runner screenshot container lookup`)});if(o.exitCode!==0){let e=o.stderr.trim();e&&(a=e);continue}let s=o.stdout.trim();if(!s){a=`simctl get_app_container returned empty output`;continue}let c=await B(s,n,r);if(c.copied){R.set(t.id,s);return}a=c.error}throw new e(`COMMAND_FAILED`,`Failed to capture iOS screenshot: ${a}`)}async function B(e,t,n){let r=`Runner screenshot was not found in the simulator container`;for(let i of en(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 Qt(t,n,r){let i=t.remainingMs();if(i>0)return i;throw new e(`COMMAND_FAILED`,`iOS ${r} timed out after ${n}ms`,{timeoutMs:n,step:r})}function $t(e,t,n){let r=x(n);m({level:`warn`,phase:`ios_screenshot_fallback`,data:{platform:e.platform,deviceKind:e.kind,deviceId:e.id,from:t,to:`runner`,...r}})}function V(e,t,n){m({level:`warn`,phase:`ios_screenshot_status_bar_${t}`,data:{platform:e.platform,deviceKind:e.kind,deviceId:e.id,...x(n)}})}function en(e,t){let n=O.resolve(e),r=t.trim();if(!r)return[];let i=[],a=new Set,o=e=>{let t=O.normalize(e);a.has(t)||(a.add(t),i.push(t))},s=r.replace(/^\/+/,``),c=s.replaceAll(`\\`,`/`);if(s&&o(O.join(n,s)),O.isAbsolute(r)&&o(O.normalize(r)),c.startsWith(`tmp/`))o(O.join(n,c));else{let e=c.lastIndexOf(`/tmp/`);if(e>=0){let t=c.slice(e+1);o(O.join(n,t))}}let l=O.basename(r);return l&&o(O.join(n,`tmp`,l)),i}function H(t){if(!(t instanceof e)||t.code!==`COMMAND_FAILED`)return!1;let n=b(t);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 tn(t){if(!(t instanceof e)||t.code!==`COMMAND_FAILED`)return!1;let n=b(t);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 nn(e,t,n,r){let i=r??await rn(e),a=Me(await je(t),i,n);a&&await Ce(t,a.width,a.height)}async function rn(t){let n=L.get(t.id);if(n!==void 0)return n;let r=await S(t,[`getenv`,t.id,`SIMULATOR_MAINSCREEN_SCALE`],{timeoutMs:ze}),i=Number(r.stdout.trim());if(!Number.isFinite(i)||i<=0)throw new e(`COMMAND_FAILED`,`Failed to read iOS simulator screenshot scale from SIMULATOR_MAINSCREEN_SCALE`);return L.set(t.id,i),i}function an(t){return!(t instanceof e)||t.details?.runnerErrorCode!==`SCROLL_KEYBOARD_OCCLUDES_SURFACE`?t:new e(t.code,t.message,{...t.details,...ne})}function on(e){let t=e?.amount!==void 0||e?.pixels!==void 0;return{...e,...t?{}:{amount:fe},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=te({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 sn(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}=ln(e),o=W(e.referenceWidth),s=W(e.referenceHeight),c=cn(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 cn(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 ln(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 un(e,t,n,r,i,a){return U(await e(t,{command:`desktopScroll`,direction:i,...sn(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 dn(e){return e===`system`?`backSystem`:`backInApp`}function fn(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 C(e,J(e,t,r,i),n),pressPoint:async(r,i)=>await pn(e,t,n,r,i),tapElementSelector:async r=>await C(e,{command:`tap`,selectorKey:r.key,selectorValue:r.value,allowNonHittableCoordinateFallback:r.allowNonHittableCoordinateFallback,...r.expectedPoint?{x:r.expectedPoint.x,y:r.expectedPoint.y}:{},...i(e)?{synthesized:!0}:{},appBundleId:t.appBundleId},n),doubleTap:async(r,i)=>{let a=await C(e,Ue([{kind:`doubleTap`,x:r,y:i}],t.appBundleId),n);return We(a),a},longPress:async(r,i,a)=>await C(e,{command:`longPress`,x:r,y:i,durationMs:a,appBundleId:t.appBundleId},n),focus:async(r,i)=>await C(e,J(e,t,r,i),n),type:async(r,i)=>_n(await C(e,{command:`type`,text:r,delayMs:i,textEntryMode:r===`
5
- `?void 0:`append`,appBundleId:t.appBundleId},n)),fill:async(r,i,a,o,s)=>await C(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 Sn(C,e,t,n,r,i),performGesture:async r=>await bn(e,t,n,r),gestureViewport:async()=>yn(await C(e,{command:`gestureViewport`,appBundleId:t.appBundleId},n))}}}async function pn(e,t,n,r,i){return s(e)&&i.surface&&i.surface!==`app`?await mn(t,r,i):i.button===`primary`?i.count===1?await gn(e,t,n,r,i):await He(e,r,i,t.appBundleId,async t=>await C(e,t,n)):await hn(e,t,n,r,i.button)}async function mn(t,n,r){if(r.button!==`primary`)throw new e(`UNSUPPORTED_OPERATION`,`${r.button} click is not supported on macOS ${r.surface} sessions.`);let{runMacOsPressAction:i}=await import(`./helper.js`).then(e=>e.t),a=await i(n.x,n.y,{bundleId:t.appBundleId,surface:r.surface,holdMs:r.holdMs,clicks:r.count,doubleClick:r.doubleTap,intervalMs:r.intervalMs,signal:t.signal});return a.holdMs===void 0?{}:{holdMs:a.holdMs}}async function hn(e,t,n,r,i){return await C(e,{command:`mouseClick`,x:r.x,y:r.y,button:i,appBundleId:t.appBundleId},n)}async function gn(e,t,n,r,i){if(i.doubleTap){let i=await C(e,Ue([{kind:`doubleTap`,x:r.x,y:r.y}],t.appBundleId),n);return We(i),i}return i.holdMs>0?await C(e,{command:`longPress`,x:r.x,y:r.y,durationMs:i.holdMs,appBundleId:t.appBundleId},n):await C(e,J(e,t,r.x,r.y),n)}function _n(e){let t=e.textEntryRoute;return vn(t)?{textEntryRoute:t}:{}}function vn(e){return typeof e==`string`&&Ne.includes(e)}function yn(t){let n=q(t.x),r=q(t.y),i=q(t.x2),a=q(t.y2);if(n===void 0||r===void 0||i===void 0||a===void 0||i<=0||a<=0)throw new e(`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 bn(e,t,n,r){if(r.topology===`two`&&ct(e,r.intent),r.topology===`single`&&s(e)){let{start:i,end:a}=ye(r);return await C(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`&&a(e)){let{start:i,end:a}=ye(r);return await C(e,{command:`swipe`,direction:xn(i,a),appBundleId:t.appBundleId},n)}return await C(e,{command:`gesture`,gesturePlan:r,appBundleId:t.appBundleId},n)}function xn(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,...i(e)?{synthesized:!0}:{},appBundleId:t.appBundleId}}async function Sn(e,t,n,r,i,o){if(ue(o?.durationMs,{invalidMessage:`scroll durationMs must be a non-negative integer at most ${de}`}),a(t))return G(await e(t,K(i,n.appBundleId,o?.durationMs),r),{amount:o?.amount,durationMs:o?.durationMs});if(re(o??{}),s(t))return await un(e,t,n,r,i,o);let c=on(o),l;try{l=await e(t,{command:`scroll`,direction:i,...sn(c),appBundleId:n.appBundleId},r)}catch(e){throw an(e)}return U(l,i,c)}function Y(e,t,n){if(s(e)){let e=n?.surface===`frontmost-app`?{surface:n.surface}:{bundleId:n?.appBundleId,surface:n?.surface};return async t=>await it(t,e)}return async(r,i)=>await C(e,{command:`alert`,action:r,appBundleId:n?.appBundleId,timeoutMs:i},t)}async function Cn(e,t,n){return await Y(e,t,n)(`get`,ie)}async function wn(t,n,r){let i=Y(t,n,r),a=r?.timeoutMs??1e4,o=Date.now(),s=!0;for(;Date.now()-o<a;){try{let e=s?a:En(o,a);return s=!1,await i(`get`,e)}catch(e){if(!X(e))throw e}await he(300)}throw new e(`COMMAND_FAILED`,`alert wait timed out`)}async function Tn(e,t,n,r){let i=Y(e,t,r),a=o(e)?ie:u,s=Date.now(),c,l=!0;for(;Date.now()-s<u;){try{let e=l?a:En(s,u);return l=!1,await i(n,e)}catch(e){if(c=e,!X(e))break}await he(300)}throw Dn(c)}function En(e,t){return Math.max(1,t-(Date.now()-e))}function Dn(t){return!(t instanceof e)||!X(t)?t:new e(t.code,t.message,{...t.details??{},hint:`If the permission sheet is visible in snapshot or screenshot but alert reports no alert, take a scoped snapshot around the visible button label and use press @ref.`})}function X(t){if(!(t instanceof e))return!1;let n=t.details??{};return n.runnerErrorCode===`ALERT_NOT_FOUND`||n.reason===`alert-not-found`}const On={0:`unknown`,1:`notRunning`,2:`runningBackgroundSuspended`,3:`runningBackground`};function kn(e,n){if(typeof e!=`object`||!e||Array.isArray(e))return;let r={...e},i=r.reason;if(!t(i))return;let a=r.priorState;if(typeof a!=`number`||!Number.isInteger(a))return;let o=On[a];o===void 0&&n?.({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 An(e){let t=jn(e.systemSurface),n=r(e.keyboard),i=kn(e.targetActivation,e=>Ke({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:we(e.snapshotQuality),qualityPayload:Fn(e.qualityPayload,t),runnerFatal:e.runnerFatal===!0,...n?{keyboard:n}:{},...t?{systemSurface:t}:{},...i?{targetActivation:i}:{},message:typeof e.message==`string`&&e.message.trim().length>0?e.message:void 0}}function jn(e){if(!Rn(e)||typeof e.bundleId!=`string`)return;let t=Ae(e.bundleId);return t&&{bundleId:t.bundleId,kind:t.kind}}function Mn(e,t,n){let r=n.nodes??[];if(n.runnerFatal===!0||r.length===0&&n.qualityPayload===void 0)return r;let i=Se({raw:t?.raw,interactiveOnly:t?.interactiveOnly,depth:t?.depth,scope:t?.scope,customActions:t?.customActions}),a=In(r,n.qualityPayload?.nodes),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:xe(i),viewport:a,hittability:{kind:`available`},lineage:{targetId:e},residue:[]}};try{return Oe(o,i).nodes}catch(e){Nn(e,n)}}function Nn(t,n){let r=n.quality;if(t instanceof g&&Ee(r))throw new e(`COMMAND_FAILED`,t.message,{...De(t),...n.systemSurface?{systemSurface:n.systemSurface}:{},snapshotQuality:{state:r.state,backend:r.backend,...r.reason?{reason:r.reason}:{},...r.reasonCode?{reasonCode:r.reasonCode}:{}},hint:Pn(n.systemSurface,r)},t);Z(t,n.systemSurface)}function Pn(e,t){return[e?`${e.bundleId} hosts the surface presented over the app, and this capture targeted that surface.`:void 0,...Te(t,[])].filter(e=>e!==void 0).join(` `)}function Fn(e,t){if(e!==void 0)return(!Rn(e)||!Array.isArray(e.nodes)||typeof e.truncated!=`boolean`)&&Z(new g(`invalid-quality-payload`,`iOS runner returned an invalid quality payload`),t),e.scope!==void 0&&e.scope!==null&&Z(new g(`invalid-quality-payload`,`iOS runner quality payload must be unscoped`,{field:`scope`}),t),{nodes:e.nodes,truncated:e.truncated,scope:null}}function In(e,t){return _(Ln(t),{fallbackToLargestRoot:!0})??_(Ln(e),{fallbackToLargestRoot:!0})??{kind:`missing`,reason:`not-provided`}}function Ln(e){return e?.filter(e=>e.parentIndex===void 0)??[]}function Rn(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Z(t,n){throw t instanceof g?new e(`COMMAND_FAILED`,t.message,{...De(t),...n?{systemSurface:n}:{}},t):t}function zn(t,n,r){if(t.appleOs===`watchos`)throw new e(`UNSUPPORTED_PLATFORM`,`watchOS is not supported: XCUITest cannot drive watchOS UI, so this device has no runner backend.`);let{overrides:i,runnerOpts:o}=fn(t,n),s={open:(e,n)=>Ye(t,e,{appBundleId:n?.appBundleId,launchConsole:n?.launchConsole,launchArgs:n?.launchArgs,terminateRunningApp:n?.terminateRunningApp,url:n?.url,runnerOptions:o}),openDevice:()=>Xe(t),close:e=>w(t,e,o),screenshot:(e,n)=>Xn(t,e,n,o),snapshot:async e=>await Bn(t,e,o),readTextAtPoint:async(e,n)=>Qn(t,n?.surface)?await $n(e,n):await er(t,e,n,o),findText:async(e,n)=>({found:(await C(t,{command:`findText`,text:e,appBundleId:n?.appBundleId},n?.signal?{...o,signal:n.signal}:o))?.found===!0}),back:async e=>{if(a(t)){await C(t,K(`menu`,n.appBundleId),o);return}await C(t,{command:dn(e),appBundleId:n.appBundleId},o)},home:async()=>{if(a(t)){await C(t,K(`home`,n.appBundleId),o);return}await C(t,{command:`home`,appBundleId:n.appBundleId},o)},setOrientation:async r=>{let i=Jn(await C(t,{command:`rotate`,orientation:r,appBundleId:n.appBundleId},o));if(i!==r)throw new e(`COMMAND_FAILED`,`iOS runner observed ${i} after requesting ${r}`,{requestedOrientation:r,observedOrientation:i});return{orientation:i}},appSwitcher:async()=>{await C(t,{command:`appSwitcher`,appBundleId:n.appBundleId},o)},actionButton:async()=>{await C(t,{command:`actionButton`,appBundleId:n.appBundleId},o)},tvRemote:async(e,r)=>{await C(t,K(ge(e),n.appBundleId,r),o)},keyboardDismiss:async()=>{let e=await C(t,{command:`keyboardDismiss`,appBundleId:n.appBundleId},o);return{kind:`mechanism`,wasVisible:Q(e,`wasVisible`),dismissed:Q(e,`dismissed`),visible:Q(e,`visible`),mechanism:qn(e,`keyboardDismissMechanism`)}},keyboardEnter:async()=>{let e=await C(t,{command:`keyboardReturn`,appBundleId:n.appBundleId},o);return{kind:`visibility-echo`,visible:Q(e,`visible`),wasVisible:Q(e,`wasVisible`)}},readClipboard:()=>dt(t),writeClipboard:e=>ft(t,e),setSetting:(e,n,r,i)=>Dt(t,e,n,r,i),readSetting:e=>kt(t,e),readAlert:e=>Cn(t,o,e),awaitAlert:e=>wn(t,o,e),acceptAlert:e=>Tn(t,o,`accept`,e),dismissAlert:e=>Tn(t,o,`dismiss`,e),...i};return r?Yn(t,n,s,r):s}async function Bn(e,t,n){return s(e)&&t?.surface&&t.surface!==`app`?await lt(t,t.signal):await Vn(e,t,n)}async function Vn(e,t,n){let r=An(await me(`snapshot_capture`,async()=>await C(e,{command:`snapshot`,appBundleId:t?.appBundleId,interactiveOnly:t?.interactiveOnly,preferredBackend:t?.preferredBackend,customActions:t?.customActions,depth:t?.depth,scope:t?.scope,raw:t?.raw},Kn(n,t?.signal)),{backend:`xctest`}));Hn(e,t,r);let i=Un(r);return{nodes:Wn(e,t,r),truncated:r.truncated??!1,backend:`xctest`,producer:`apple-runner`,...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 Hn(t,n,r){if(!((r.nodes?.length??0)>0)&&!Gn(n,r.quality)&&t.kind===`simulator`)throw new e(`COMMAND_FAILED`,`XCTest snapshot returned 0 nodes on iOS simulator.`)}function Un(e){let t=[];return!e.quality&&e.message&&t.push(e.message),e.systemSurface&&t.push(ke(e.systemSurface.bundleId)),e.targetActivation&&t.push(ut(e.targetActivation)),t}function Wn(e,t,n){return s(e)?n.nodes??[]:Mn(e.id,t,n)}function Gn(e,t){return ee(e?.scope)!==null&&t!==void 0&&t.state!==`sparse`}function Kn(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 Jn(t){let n=t.orientation;if(typeof n==`string`&&pe.includes(n))return n;throw new e(`COMMAND_FAILED`,`iOS runner returned an invalid orientation result`,{orientation:n})}function Yn(e,t,n,r){let i={...n,open:async()=>$(`open`),openDevice:async()=>$(`openDevice`),close:async()=>$(`close`),screenshot:async()=>$(`screenshot`),readClipboard:async()=>$(`readClipboard`),writeClipboard:async()=>$(`writeClipboard`),setSetting:async()=>$(`setSetting`),readSetting:async()=>$(`readSetting`)};return be(i,n=>Ge(r,{deviceId:e.id,requestId:t.requestId},n))}function $(t){throw new e(`UNSUPPORTED_OPERATION`,`${t} uses local Apple tooling (simctl/devicectl), which an injected runner transport cannot reach; the provider session must supply its own ${t} implementation.`)}async function Xn(t,r,i={},a){if(Zn(t,i.surface)){if(i.fullscreen)throw new e(`INVALID_ARGS`,`screenshot --fullscreen is not accepted on the macOS ${i.surface} surface: it always captures the main display`,{reason:n.macOsHelperSurfaceFixedFrame,surface:i.surface});await at(r,{surface:i.surface});return}if(i.captureBackend===`runner`){await z(t,r,i.appBundleId,i.fullscreen,a);return}await Jt(t,r,{appBundleId:i.appBundleId,pixelDensity:i.pixelDensity,fullscreen:i.fullscreen,runnerOptions:a,normalizeStatusBar:i.normalizeStatusBar,skipIosSimulatorBootCheck:i.skipIosSimulatorBootCheck})}function Zn(e,t){return s(e)&&t!==void 0&&t!==`app`}function Qn(e,t){return s(e)&&t!==void 0&&t!==`app`}async function $n(e,t){let{runMacOsReadTextAction:n}=await import(`./helper.js`).then(e=>e.t);return(await n(e.x,e.y,{bundleId:t?.appBundleId,surface:t?.surface})).text}async function er(e,t,n,r){let i=await C(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{zn as createAppleInteractor};
3
+ `).replace(/\n$/,``))}async function pt(e,t){if(l(e)){await ot(t);return}D(e,`clipboard`),await O(e),_(await T(e,[`pbcopy`,e.id],{allowFailure:!0,stdin:t}),`Failed to write iOS simulator clipboard`)}function mt(t){if(!ee(t))throw new e(`UNSUPPORTED_OPERATION`,m.message,{deviceId:t.id,appleOs:te(t),deviceKind:t.kind,reason:m.reason,hint:m.hint})}async function ht(e,t){mt(e);let n=se(t);return await T(e,[`ui`,e.id,`content_size`,n]),oe(n,n)}async function gt(t){mt(t),await O(t);let n=_(await T(t,[`ui`,t.id,`content_size`],{allowFailure:!0}),`Failed to read iOS content size category`),r=n.stdout.trim(),i=de(r);if(i===void 0)throw new e(`COMMAND_FAILED`,`iOS simulator reported an unknown text size: ${r||`(empty)`}`,{deviceId:t.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 oe(i,r)}const _t=[`--time`,`9:41`,`--dataNetwork`,`wifi`,`--wifiMode`,`active`,`--wifiBars`,`3`,`--batteryState`,`charged`,`--batteryLevel`,`100`],vt={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`},yt={1:`searching`,2:`failed`,3:`active`},bt={0:`notSupported`,1:`searching`,2:`failed`,3:`active`},A=new Set;async function xt(e){let t=null,n=!1;if(Ct(e))n=!0;else try{t=await wt(e),n=!0}catch(t){I(e,`snapshot_failed`,t)}try{(!n||t)&&await P(e),await F(e,_t)}catch(t){I(e,`prepare_failed`,t)}return async()=>{await St(e,n?t:null)}}async function St(e,t){if(await P(e),!t){M(e);return}await F(e,Et(t)),j(e)}function j(e){A.delete(N(e))}function M(e){A.add(N(e))}function Ct(e){return A.has(N(e))}function N(e){return`${e.platform}:${e.kind}:${e.id}`}async function wt(e){return Tt(_(await T(e,[`status_bar`,e.id,`list`],{allowFailure:!0}),`Failed to read simulator status bar overrides`).stdout)}async function P(e){await T(e,[`status_bar`,e.id,`clear`])}async function F(e,t){t.length!==0&&await T(e,[`status_bar`,e.id,`override`,...t])}function Tt(t){let n={},r=t.split(`
4
+ `).map(e=>e.trim()).filter(e=>e.length>0&&e!==`Current Status Bar Overrides:`&&!/^=+$/.test(e));for(let t of r){let r=/^DataNetworkType:\s+(\d+)$/.exec(t);if(r){let t=Number(r[1]),i=vt[t];if(!i)throw new e(`COMMAND_FAILED`,`Unsupported simulator data network type: ${t}`);n.dataNetwork=i;continue}let i=/^WiFi Mode:\s+(\d+),\s+WiFi Bars:\s+(\d+)$/.exec(t);if(i){let e=yt[Number(i[1])];e&&(n.wifiMode=e),n.wifiBars=i[2];continue}let a=/^Cell Mode:\s+(\d+),\s+Cell Bars:\s+(\d+)$/.exec(t);if(a){let t=Number(a[1]),r=bt[t];if(!r)throw new e(`COMMAND_FAILED`,`Unsupported simulator cellular mode: ${t}`);n.cellularMode=r,n.cellularBars=a[2];continue}let o=/^Operator Name:\s*(.*)$/.exec(t);if(o){n.operatorName=o[1]??``;continue}}return Object.keys(n).length===0?null:n}function Et(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||Dt(e.dataNetwork)||e.operatorName!==void 0)&&t.push(`--cellularBars`,e.cellularBars),e.operatorName!==void 0&&t.push(`--operatorName`,e.operatorName),t}function Dt(e){return!!(e&&e!==`hide`&&e!==`wifi`)}function I(e,t,n){g({level:`warn`,phase:`ios_screenshot_status_bar_${t}`,data:{platform:e.platform,deviceKind:e.kind,deviceId:e.id,...S(n)}})}async function Ot(t,n,r,i,a){if(l(t)){let t=n.toLowerCase();if(t===`appearance`){await at(r);return}if(t===`permission`){let t=p(r);if(t===`deny`)throw new e(`INVALID_ARGS`,le(`permission`));let n=Mt(a?.permissionTarget);return await et(t,n)}throw new e(`INVALID_ARGS`,le(n))}D(t,`settings`),await O(t);let o=n.toLowerCase();switch(o){case`clear-app-state`:{if(r.toLowerCase()!==`clear`)throw new e(`INVALID_ARGS`,`settings clear-app-state only supports clear.`);if(!i)throw new e(`INVALID_ARGS`,`settings clear-app-state requires an app id or an active app session.`);let n=await jt(t,i);return{bundleId:n.bundleId,containerPath:n.containerPath,cleared:!0}}case`reset-keychain`:if(r.toLowerCase()!==`clear`)throw new e(`INVALID_ARGS`,`settings reset-keychain only supports clear.`);return await T(t,[`keychain`,t.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=h(r)?`active`:`failed`;await T(t,[`status_bar`,t.id,`override`,`--wifiMode`,e]),j(t);return}case`airplane`:h(r)?(await T(t,[`status_bar`,t.id,`override`,`--dataNetwork`,`hide`,`--wifiMode`,`failed`,`--wifiBars`,`0`,`--cellularMode`,`failed`,`--cellularBars`,`0`,`--operatorName`,``]),j(t)):(await T(t,[`status_bar`,t.id,`clear`]),M(t));return;case`location`:{if(r.toLowerCase()===`set`){let{latitude:e,longitude:n}=fe(a);return await T(t,[`location`,t.id,`set`,`${e},${n}`]),{latitude:e,longitude:n}}let n=h(r);if(!i)throw new e(`INVALID_ARGS`,`location setting requires an active app in session`);let o=n?`grant`:`revoke`;await T(t,[`privacy`,t.id,o,`location`,i]);return}case`faceid`:case`touchid`:{let e=o,n=Ft[e];await Ut(t,Ht(r,e),{settingName:e,label:n.label,modalityAliases:n.modalityAliases});return}case`appearance`:{let e=await Nt(t,r);await T(t,[`ui`,t.id,`appearance`,e]);return}case`text-size`:return await ht(t,r);case`permission`:if(!i)throw new e(`INVALID_ARGS`,`permission setting requires an active app in session`);await Lt(t,It(p(r)),Vt(a?.permissionTarget,a?.permissionMode),i);return;default:throw new e(`INVALID_ARGS`,`Unsupported setting: ${n}`)}}const kt={"text-size":gt};async function At(e,t){return await kt[t](e)}async function jt(t,n){if(!c(t)||t.kind!==`simulator`)throw new e(`UNSUPPORTED_OPERATION`,`Clearing app state is currently supported only on iOS simulators.`);let r=await rt(t,n);await O(t),await $e(t,r);let i=_(await T(t,[`get_app_container`,t.id,r,`data`],{allowFailure:!0}),`simctl get_app_container failed for ${r}`).stdout.trim();if(!i)throw new e(`COMMAND_FAILED`,`simctl get_app_container returned an empty data container path for ${r}`);let a=await Ie(i);return await Promise.all(a.map(e=>Fe(k.join(i,e)))),{bundleId:r,containerPath:i}}function Mt(t){let n=t?.trim().toLowerCase();if(n===`accessibility`||n===`screen-recording`||n===`input-monitoring`)return n;throw new e(`INVALID_ARGS`,`Unsupported macOS permission target. Use accessibility|screen-recording|input-monitoring.`)}async function Nt(t,n){let r=ce(n);if(r!==`toggle`)return r;let i=_(await T(t,[`ui`,t.id,`appearance`],{allowFailure:!0}),`Failed to read current iOS appearance`),a=Pt(i.stdout,i.stderr);if(!a)throw new e(`COMMAND_FAILED`,`Unable to determine current iOS appearance for toggle`,{stdout:i.stdout,stderr:i.stderr});return a===`dark`?`light`:`dark`}function Pt(e,t){let n=/\b(light|dark|unsupported|unknown)\b/i.exec(`${e}\n${t}`);if(!n)return null;let r=n[1]?.toLowerCase();return r===`dark`?`dark`:r===`light`?`light`:null}const Ft={faceid:{label:`Face ID`,modalityAliases:[`face`]},touchid:{label:`Touch ID`,modalityAliases:[`finger`,`touch`]}};function It(e){return e===`deny`?`revoke`:e}async function Lt(e,t,n,r){try{await T(e,[`privacy`,e.id,t,n,r])}catch(i){throw Rt(i)?zt(e,t,n,r,i):i}}function Rt(t){if(!(t instanceof e)||t.code!==`COMMAND_FAILED`)return!1;let n=String(t.details?.stderr??``).toLowerCase();return/failed to (set|grant|revoke|reset) access/.test(n)&&n.includes(`operation not permitted`)}function zt(t,n,r,i,a){return n===`reset`?new e(`UNSUPPORTED_OPERATION`,`iOS simulator does not support resetting ${r} permission via simctl privacy on this runtime.`,{deviceId:t.id,appBundleId:i,hint:`Use reinstall to force a fresh prompt, or reset simulator content and settings.`},a):new e(`UNSUPPORTED_OPERATION`,`iOS simulator does not support setting ${r} permission via simctl privacy on this runtime.`,{deviceId:t.id,appBundleId:i,hint:"Privacy support varies by Xcode runtime: run `xcrun simctl privacy help` for its documented services, or use the `all` target, which applies the action to every service this runtime can change."},a)}const Bt={all:`all`,camera:`camera`,microphone:`microphone`,contacts:`contacts`,"contacts-limited":`contacts-limited`,notifications:`notifications`,calendar:`calendar`,location:`location`,"location-always":`location-always`,"media-library":`media-library`,motion:`motion`,reminders:`reminders`,siri:`siri`};function Vt(t,n){let r=ue(t);if(r===`photos`){let t=n?.trim().toLowerCase();if(!t||t===`full`)return`photos`;if(t===`limited`)return`photos-add`;throw new e(`INVALID_ARGS`,`Invalid photos mode: ${n}. Use full|limited.`)}if(n?.trim())throw new e(`INVALID_ARGS`,`Permission mode is only supported for photos. Received: ${n}.`);return Bt[r]}function Ht(t,n){let r=t.trim().toLowerCase();if(r===`match`)return`match`;if(r===`nonmatch`)return`nonmatch`;if(r===`enroll`)return`enroll`;if(r===`unenroll`)return`unenroll`;throw new e(`INVALID_ARGS`,`Invalid ${n} state: ${t}. Use match|nonmatch|enroll|unenroll.`)}async function Ut(n,r,i){let a=Wt(n.id,r,i.modalityAliases),o=[];for(let e of a){let t=Xe(n,e),r=await Ue(t,{allowFailure:!0});if(r.exitCode===0)return;o.push({args:t,stderr:r.stderr,stdout:r.stdout,exitCode:r.exitCode})}let s=t(o);throw o.length>0&&o.every(e=>Gt(e.stdout,e.stderr))?new e(`UNSUPPORTED_OPERATION`,`${i.label} simulation is not supported on this simulator runtime.`,{deviceId:n.id,action:r,setting:i.settingName,attempts:s}):new e(`COMMAND_FAILED`,`Failed to simulate ${i.settingName}.`,{deviceId:n.id,action:r,setting:i.settingName,attempts:s})}function Wt(e,t,n){let r=n.length>0?n:[`face`];switch(t){case`match`:return r.flatMap(t=>[[`biometric`,e,`match`,t],[`biometric`,`match`,e,t]]);case`nonmatch`:return r.flatMap(t=>[[`biometric`,e,`nonmatch`,t],[`biometric`,e,`nomatch`,t],[`biometric`,`nonmatch`,e,t],[`biometric`,`nomatch`,e,t]]);case`enroll`:return[[`biometric`,e,`enroll`,`yes`],[`biometric`,e,`enroll`,`1`],[`biometric`,`enroll`,e,`yes`],[`biometric`,`enroll`,e,`1`]];case`unenroll`:return[[`biometric`,e,`enroll`,`no`],[`biometric`,e,`enroll`,`0`],[`biometric`,`enroll`,e,`no`],[`biometric`,`enroll`,e,`0`]]}}function Gt(e,t){let n=`${e}\n${t}`.toLowerCase();return n.includes(`unrecognized subcommand`)||n.includes(`unknown subcommand`)||n.includes(`not supported`)||n.includes(`unavailable`)||n.includes(`biometric`)&&n.includes(`invalid`)}function Kt(e){let t=e.screenshotMetadata;if(!t||typeof t!=`object`||Array.isArray(t))return;let n=t,r=L(n.displayID),i=L(n.pixelWidth),a=L(n.pixelHeight),o=qt(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 L(e){return typeof e==`number`&&Number.isInteger(e)&&e>0?e:void 0}function qt(e){return typeof e==`number`&&Number.isFinite(e)&&e>0?e:void 0}const Jt={ensureBooted:O,prepareStatusBarForScreenshot:xt,resolveCaptureDisplay:st,captureWithRetry:Zt,normalizeDensity:rn,captureWithRunner:B,shouldFallbackToRunner:U},R=new Map,z=new Map;async function Yt(e,t,n={}){if(l(e)){await B(e,t,n.appBundleId,n.fullscreen,n.runnerOptions);return}if(e.kind===`simulator`){await Xt(e,t,n);return}await Ge(e).captureScreenshot(e,t,{appBundleId:n.appBundleId,fullscreen:n.fullscreen,runnerOptions:n.runnerOptions,runRunnerCommand:E})}async function Xt(t,n,r={}){if(t.kind!==`simulator`)throw new e(`UNSUPPORTED_OPERATION`,`Simulator screenshot fallback flow supports only iOS simulators`);let i={...Jt,...r.deps??{}};r.skipIosSimulatorBootCheck||await i.ensureBooted(t);let a=await i.resolveCaptureDisplay(t),o=async()=>{await i.captureWithRetry(t,n,a),await i.normalizeDensity(t,n,r.pixelDensity,a?.pointScale)},s=async()=>{};if(r.normalizeStatusBar===!0)try{s=await i.prepareStatusBarForScreenshot(t)}catch(e){H(t,`prepare_failed`,e)}try{try{await o();return}catch(e){let n=e;if(r.skipIosSimulatorBootCheck&&nn(e)){await i.ensureBooted(t);try{await o();return}catch(e){n=e}}if(!i.shouldFallbackToRunner(n))throw n;en(t,`simctl_screenshot`,n)}let e=await i.captureWithRunner(t,n,r.appBundleId,r.fullscreen,r.runnerOptions);await i.normalizeDensity(t,n,r.pixelDensity,e?.pixelsPerPoint)}finally{await s().catch(e=>H(t,`restore_failed`,e))}}async function Zt(e,t,n){let r=v.fromTimeoutMs(Ve),i=[`io`,e.id,`screenshot`,...ct(n),t];await be(async({deadline:t})=>{await T(e,i,{timeoutMs:Math.max(1e3,t?.remainingMs()??2e4)})},{maxAttempts:5,baseDelayMs:ze,maxDelayMs:Be,jitter:.2,shouldRetry:e=>U(e)},{deadline:r,phase:`ios_simulator_screenshot`})}async function B(t,n,r,i,a){if(t.kind===`device`&&!l(t)){await Ge(t).captureScreenshot(t,n,{appBundleId:r,fullscreen:i,runnerOptions:a,preferRunner:!0,runRunnerCommand:E});return}let o=await E(t,{command:`screenshot`,appBundleId:r,fullscreen:i,inlineScreenshot:!1},a),s=o.message;if(!s)throw new e(`COMMAND_FAILED`,`Failed to capture iOS screenshot: runner returned no file path`);let c=Kt(o);if(l(t))return await Le(s,n),c;if(t.kind===`simulator`)return await Qt(t,s,n),c;throw new e(`COMMAND_FAILED`,`Unsupported Apple screenshot target`)}async function Qt(t,n,r){let i=v.fromTimeoutMs(Re),a=`Unable to locate runner container for simulator screenshot`,o=z.get(t.id);if(o){let e=await V(o,n,r);if(e.copied)return;a=e.error,z.delete(t.id)}for(let e of Ye){let o=await T(t,[`get_app_container`,t.id,e,`data`],{allowFailure:!0,timeoutMs:$t(i,Re,`runner screenshot container lookup`)});if(o.exitCode!==0){let e=o.stderr.trim();e&&(a=e);continue}let s=o.stdout.trim();if(!s){a=`simctl get_app_container returned empty output`;continue}let c=await V(s,n,r);if(c.copied){z.set(t.id,s);return}a=c.error}throw new e(`COMMAND_FAILED`,`Failed to capture iOS screenshot: ${a}`)}async function V(e,t,n){let r=`Runner screenshot was not found in the simulator container`;for(let i of tn(e,t))try{return await Le(i,n),{copied:!0}}catch(e){r=e instanceof Error?e.message:String(e)}return{copied:!1,error:r}}function $t(t,n,r){let i=t.remainingMs();if(i>0)return i;throw new e(`COMMAND_FAILED`,`iOS ${r} timed out after ${n}ms`,{timeoutMs:n,step:r})}function en(e,t,n){let r=S(n);g({level:`warn`,phase:`ios_screenshot_fallback`,data:{platform:e.platform,deviceKind:e.kind,deviceId:e.id,from:t,to:`runner`,...r}})}function H(e,t,n){g({level:`warn`,phase:`ios_screenshot_status_bar_${t}`,data:{platform:e.platform,deviceKind:e.kind,deviceId:e.id,...S(n)}})}function tn(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 U(t){if(!(t instanceof e)||t.code!==`COMMAND_FAILED`)return!1;let n=We(t);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 nn(t){if(!(t instanceof e)||t.code!==`COMMAND_FAILED`)return!1;let n=We(t);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 rn(e,t,n,r){let i=r??await an(e),a=Ne(await Me(t),i,n);a&&await we(t,a.width,a.height)}async function an(t){let n=R.get(t.id);if(n!==void 0)return n;let r=await T(t,[`getenv`,t.id,`SIMULATOR_MAINSCREEN_SCALE`],{timeoutMs:He}),i=Number(r.stdout.trim());if(!Number.isFinite(i)||i<=0)throw new e(`COMMAND_FAILED`,`Failed to read iOS simulator screenshot scale from SIMULATOR_MAINSCREEN_SCALE`);return R.set(t.id,i),i}function on(t){return!(t instanceof e)||t.details?.runnerErrorCode!==`SCROLL_KEYBOARD_OCCLUDES_SURFACE`?t:new e(t.code,t.message,{...t.details,...ie})}function sn(e){let t=e?.amount!==void 0||e?.pixels!==void 0;return{...e,...t?{}:{amount:he},durationMs:e?.durationMs??400,releaseBehavior:e?.releaseBehavior??`controlled`}}function cn(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=re({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 ln(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}=dn(e),o=W(e.referenceWidth),s=W(e.referenceHeight),c=un(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 un(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 dn(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 fn(e,t,n,r,i,a){return cn(await e(t,{command:`desktopScroll`,direction:i,...ln(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 pn(e){return e===`system`?`backSystem`:`backInApp`}function mn(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 hn(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}:{},...o(e)?{synthesized:!0}:{},appBundleId:t.appBundleId},n),doubleTap:async(r,i)=>{let a=await E(e,C([{kind:`doubleTap`,x:r,y:i}],t.appBundleId),n);return w(a),a},appState:async()=>bn(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)=>yn(await E(e,{command:`type`,text:r,delayMs:i,textEntryMode:r===`
5
+ `?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 Tn(E,e,t,n,r,i),performGesture:async r=>await Cn(e,t,n,r),gestureViewport:async()=>Sn(await E(e,{command:`gestureViewport`,appBundleId:t.appBundleId},n))}}}async function hn(e,t,n,r,i){let a=l(e)?u(i.surface):void 0;return a?await gn(t,r,i,a):i.button===`primary`?i.count===1?await vn(e,t,n,r,i):await Ke(e,r,i,t.appBundleId,async t=>await E(e,t,n)):await _n(e,t,n,r,i.button)}async function gn(t,n,r,i){if(r.button!==`primary`)throw new e(`UNSUPPORTED_OPERATION`,`${r.button} click is not supported on macOS ${i} sessions.`);let{runMacOsPressAction:a}=await import(`./helper.js`).then(e=>e.t),o=await a(n.x,n.y,{bundleId:t.appBundleId,surface:i,holdMs:r.holdMs,clicks:r.count,doubleClick:r.doubleTap,intervalMs:r.intervalMs,signal:t.signal});return o.holdMs===void 0?{}:{holdMs:o.holdMs}}async function _n(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 vn(e,t,n,r,i){if(i.doubleTap){let i=await E(e,C([{kind:`doubleTap`,x:r.x,y:r.y}],t.appBundleId),n);return w(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 yn(e){let t=e.textEntryRoute;return xn(t)?{textEntryRoute:t}:{}}function bn(e){let t=e.applicationState;return n(t)?{applicationState:t}:{}}function xn(e){return typeof e==`string`&&Pe.includes(e)}function Sn(t){let n=q(t.x),r=q(t.y),i=q(t.x2),a=q(t.y2);if(n===void 0||r===void 0||i===void 0||a===void 0||i<=0||a<=0)throw new e(`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 Cn(e,t,n,r){if(r.topology===`two`&&lt(e,r.intent),r.topology===`single`&&l(e)){let{start:i,end:a}=y(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`&&s(e)){let{start:i,end:a}=y(r);return await E(e,{command:`swipe`,direction:wn(i,a),appBundleId:t.appBundleId},n)}return await E(e,{command:`gesture`,gesturePlan:r,appBundleId:t.appBundleId},n)}function wn(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,...o(e)?{synthesized:!0}:{},appBundleId:t.appBundleId}}async function Tn(e,t,n,r,i,a){if(pe(a?.durationMs,{invalidMessage:`scroll durationMs must be a non-negative integer at most ${me}`}),s(t))return G(await e(t,K(i,n.appBundleId,a?.durationMs),r),{amount:a?.amount,durationMs:a?.durationMs});if(ae(a??{}),l(t))return await fn(e,t,n,r,i,a);let o=sn(a),c;try{c=await e(t,{command:`scroll`,direction:i,...ln(o),appBundleId:n.appBundleId},r)}catch(e){throw on(e)}return cn(c,i,o)}function Y(e,t,n){if(l(e)){let e=n?.surface===`frontmost-app`?{surface:n.surface}:{bundleId:n?.appBundleId,surface:n?.surface};return async t=>await tt(t,e)}return async(r,i)=>await E(e,{command:`alert`,action:r,appBundleId:n?.appBundleId,timeoutMs:i},t)}async function En(e,t,n){return await Y(e,t,n)(`get`,d)}async function Dn(t,n,r){let i=Y(t,n,r),a=r?.timeoutMs??1e4,o=Date.now(),s=!0;for(;Date.now()-o<a;){try{let e=s?a:kn(o,a);return s=!1,await i(`get`,e)}catch(e){if(!X(e))throw e}await ve(300)}throw new e(`COMMAND_FAILED`,`alert wait timed out`)}async function On(e,t,n,r){let i=Y(e,t,r),a=c(e)?d:f,o=Date.now(),s,l=!0;for(;Date.now()-o<f;){try{let e=l?a:kn(o,f);return l=!1,await i(n,e)}catch(e){if(s=e,!X(e))break}await ve(300)}throw An(s)}function kn(e,t){return Math.max(1,t-(Date.now()-e))}function An(t){return!(t instanceof e)||!X(t)?t:new e(t.code,t.message,{...t.details??{},hint:`If the permission sheet is visible in snapshot or screenshot but alert reports no alert, take a scoped snapshot around the visible button label and use press @ref.`})}function X(t){if(!(t instanceof e))return!1;let n=t.details??{};return n.runnerErrorCode===`ALERT_NOT_FOUND`||n.reason===`alert-not-found`}const jn={0:`unknown`,1:`notRunning`,2:`runningBackgroundSuspended`,3:`runningBackground`};function Mn(e,t){if(typeof e!=`object`||!e||Array.isArray(e))return;let n={...e},i=n.reason;if(!r(i))return;let a=n.priorState;if(typeof a!=`number`||!Number.isInteger(a))return;let o=jn[a];o===void 0&&t?.({reason:i,rawPriorState:a});let s=n.otherActiveApplicationPid;return{reason:i,priorState:o??`unknown`,...typeof s==`number`&&Number.isInteger(s)&&s>0?{otherActiveApplicationPid:s}:{}}}function Nn(e){let t=Pn(e.systemSurface),n=a(e.keyboard),r=Mn(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:Te(e.snapshotQuality),qualityPayload:Rn(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 Pn(e){if(!Vn(e)||typeof e.bundleId!=`string`)return;let t=je(e.bundleId);return t&&{bundleId:t.bundleId,kind:t.kind}}function Fn(e,t,n){let r=n.nodes??[];if(n.runnerFatal===!0||r.length===0&&n.qualityPayload===void 0)return r;let i=Ce({raw:t?.raw,interactiveOnly:t?.interactiveOnly,depth:t?.depth,scope:t?.scope,customActions:t?.customActions}),a=zn(r,n.qualityPayload?.nodes),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:Se(i),viewport:a,hittability:{kind:`available`},lineage:{targetId:e},residue:[]}};try{return ke(o,i).nodes}catch(e){In(e,n)}}function In(t,n){let r=n.quality;if(t instanceof b&&De(r))throw new e(`COMMAND_FAILED`,t.message,{...Oe(t),...n.systemSurface?{systemSurface:n.systemSurface}:{},snapshotQuality:{state:r.state,backend:r.backend,...r.reason?{reason:r.reason}:{},...r.reasonCode?{reasonCode:r.reasonCode}:{}},hint:Ln(n.systemSurface,r)},t);Z(t,n.systemSurface)}function Ln(e,t){return[e?`${e.bundleId} hosts the surface presented over the app, and this capture targeted that surface.`:void 0,...Ee(t,[])].filter(e=>e!==void 0).join(` `)}function Rn(e,t){if(e!==void 0)return(!Vn(e)||!Array.isArray(e.nodes)||typeof e.truncated!=`boolean`)&&Z(new b(`invalid-quality-payload`,`iOS runner returned an invalid quality payload`),t),e.scope!==void 0&&e.scope!==null&&Z(new b(`invalid-quality-payload`,`iOS runner quality payload must be unscoped`,{field:`scope`}),t),{nodes:e.nodes,truncated:e.truncated,scope:null}}function zn(e,t){return x(Bn(t),{fallbackToLargestRoot:!0})??x(Bn(e),{fallbackToLargestRoot:!0})??{kind:`missing`,reason:`not-provided`}}function Bn(e){return e?.filter(e=>e.parentIndex===void 0)??[]}function Vn(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Z(t,n){throw t instanceof b?new e(`COMMAND_FAILED`,t.message,{...Oe(t),...n?{systemSurface:n}:{}},t):t}function Hn(t,n,r){if(t.appleOs===`watchos`)throw new e(`UNSUPPORTED_PLATFORM`,`watchOS is not supported: XCUITest cannot drive watchOS UI, so this device has no runner backend.`);let{overrides:i,runnerOpts:a}=mn(t,n),o={open:(e,n)=>Ze(t,e,{appBundleId:n?.appBundleId,launchConsole:n?.launchConsole,launchArgs:n?.launchArgs,terminateRunningApp:n?.terminateRunningApp,url:n?.url,runnerOptions:a}),openDevice:()=>Qe(t),close:e=>$e(t,e,a),screenshot:(e,n)=>$n(t,e,n,a),snapshot:async e=>await Un(t,e,a),readTextAtPoint:async(e,n)=>{let r=l(t)?u(n?.surface):void 0;return r?await er(e,r,n?.appBundleId):await tr(t,e,n,a)},findText:async(e,n)=>({found:(await E(t,{command:`findText`,text:e,appBundleId:n?.appBundleId},n?.signal?{...a,signal:n.signal}:a))?.found===!0}),back:async e=>{if(s(t)){await E(t,K(`menu`,n.appBundleId),a);return}await E(t,{command:pn(e),appBundleId:n.appBundleId},a)},home:async()=>{if(s(t)){await E(t,K(`home`,n.appBundleId),a);return}await E(t,{command:`home`,appBundleId:n.appBundleId},a)},setOrientation:async r=>{let i=Zn(await E(t,{command:`rotate`,orientation:r,appBundleId:n.appBundleId},a));if(i!==r)throw new e(`COMMAND_FAILED`,`iOS runner observed ${i} after requesting ${r}`,{requestedOrientation:r,observedOrientation:i});return{orientation:i}},appSwitcher:async()=>{await E(t,{command:`appSwitcher`,appBundleId:n.appBundleId},a)},actionButton:async()=>{await E(t,{command:`actionButton`,appBundleId:n.appBundleId},a)},tvRemote:async(e,r)=>{await E(t,K(ye(e),n.appBundleId,r),a)},keyboardDismiss:async()=>{let e=await E(t,{command:`keyboardDismiss`,appBundleId:n.appBundleId},a);return{kind:`mechanism`,wasVisible:Q(e,`wasVisible`),dismissed:Q(e,`dismissed`),visible:Q(e,`visible`),mechanism:Xn(e,`keyboardDismissMechanism`)}},keyboardEnter:async()=>{let e=await E(t,{command:`keyboardReturn`,appBundleId:n.appBundleId},a);return{kind:`visibility-echo`,visible:Q(e,`visible`),wasVisible:Q(e,`wasVisible`)}},readClipboard:()=>ft(t),writeClipboard:e=>pt(t,e),setSetting:(e,n,r,i)=>Ot(t,e,n,r,i),readSetting:e=>At(t,e),readAlert:e=>En(t,a,e),awaitAlert:e=>Dn(t,a,e),acceptAlert:e=>On(t,a,`accept`,e),dismissAlert:e=>On(t,a,`dismiss`,e),...i};return r?Qn(t,n,o,r):o}async function Un(e,t,n){let r=l(e)?u(t?.surface):void 0;return r?await ut({...t,surface:r},t?.signal):await Wn(e,t,n)}async function Wn(e,t,n){let r=Nn(await _e(`snapshot_capture`,async()=>await E(e,{command:`snapshot`,appBundleId:t?.appBundleId,interactiveOnly:t?.interactiveOnly,preferredBackend:t?.preferredBackend,customActions:t?.customActions,depth:t?.depth,scope:t?.scope,raw:t?.raw},Yn(n,t?.signal)),{backend:`xctest`}));Gn(e,t,r);let i=Kn(r);return{nodes:qn(e,t,r),truncated:r.truncated??!1,backend:`xctest`,producer:`apple-runner`,...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 Gn(t,n,r){if(!((r.nodes?.length??0)>0)&&!Jn(n,r.quality)&&t.kind===`simulator`)throw new e(`COMMAND_FAILED`,`XCTest snapshot returned 0 nodes on iOS simulator.`)}function Kn(e){let t=[];return!e.quality&&e.message&&t.push(e.message),e.systemSurface&&t.push(Ae(e.systemSurface.bundleId)),e.targetActivation&&t.push(dt(e.targetActivation)),t}function qn(e,t,n){return l(e)?n.nodes??[]:Fn(e.id,t,n)}function Jn(e,t){return ne(e?.scope)!==null&&t!==void 0&&t.state!==`sparse`}function Yn(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 Xn(e,t){let n=e[t];return typeof n==`string`?n:void 0}function Zn(t){let n=t.orientation;if(typeof n==`string`&&ge.includes(n))return n;throw new e(`COMMAND_FAILED`,`iOS runner returned an invalid orientation result`,{orientation:n})}function Qn(e,t,n,r){let i={...n,open:async()=>$(`open`),openDevice:async()=>$(`openDevice`),close:async()=>$(`close`),screenshot:async()=>$(`screenshot`),readClipboard:async()=>$(`readClipboard`),writeClipboard:async()=>$(`writeClipboard`),setSetting:async()=>$(`setSetting`),readSetting:async()=>$(`readSetting`)};return xe(i,n=>qe(r,{deviceId:e.id,requestId:t.requestId},n))}function $(t){throw new e(`UNSUPPORTED_OPERATION`,`${t} uses local Apple tooling (simctl/devicectl), which an injected runner transport cannot reach; the provider session must supply its own ${t} implementation.`)}async function $n(t,n,r={},a){let o=l(t)?u(r.surface):void 0;if(o){if(r.fullscreen)throw new e(`INVALID_ARGS`,`screenshot --fullscreen is not accepted on the macOS ${o} surface: it always captures the main display`,{reason:i.macOsHelperSurfaceFixedFrame,surface:o});await nt(n,{surface:o});return}if(r.captureBackend===`runner`){await B(t,n,r.appBundleId,r.fullscreen,a);return}await Yt(t,n,{appBundleId:r.appBundleId,pixelDensity:r.pixelDensity,fullscreen:r.fullscreen,runnerOptions:a,normalizeStatusBar:r.normalizeStatusBar,skipIosSimulatorBootCheck:r.skipIosSimulatorBootCheck})}async function er(e,t,n){let{runMacOsReadTextAction:r}=await import(`./helper.js`).then(e=>e.t);return(await r(e.x,e.y,{bundleId:n,surface:t})).text}async function tr(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{Hn as createAppleInteractor};
@@ -1 +1 @@
1
- import{D as e}from"./sdk-contracts.js";import{i as t}from"./sdk-batch-runner.js";import{a as n}from"./exec.js";import{o as r}from"./tv-remote.js";import"./command.js";import{t as i}from"./tool-provider3.js";function a(t){let n=async n=>{throw new e(`UNSUPPORTED_OPERATION`,`${n} is not supported on ${t}`)};return{open:()=>n(`open`),openDevice:()=>n(`openDevice`),close:()=>n(`close`),tap:()=>n(`tap`),longPress:()=>n(`longPress`),focus:()=>n(`focus`),type:()=>n(`type`),fill:()=>n(`fill`),scroll:()=>n(`scroll`),screenshot:()=>n(`screenshot`),snapshot:()=>n(`snapshot`),back:()=>n(`back`),setOrientation:()=>n(`setOrientation`),setSetting:()=>n(`setSetting`)}}const o={allowFailure:!0,timeoutMs:3e4};async function s(e,t){n(await i().launchApp(e.id,t,o),`Failed to launch Vega app ${t}`,{appName:t,deviceId:e.id})}async function c(e){n(await i().checkConnected(e.id,o),`Vega device is not connected`,{deviceId:e.id})}async function l(e,t){n(await i().terminateApp(e.id,t,o),`Failed to terminate Vega app ${t}`,{appName:t,deviceId:e.id})}async function u(e,t,a){let o=r(t);n(await i().pressRemote(e.id,o,a,{allowFailure:!0,timeoutMs:1e4+(a??0)}),`Failed to press Vega TV remote ${t}`,{button:t,deviceId:e.id})}const d=[{matches:(e,n)=>t(e)||!!n?.url,message:`Vega open does not support URLs or deep links.`,hint:`Use open <component-id> with an installed Vega app component ID.`},{matches:(e,t)=>!!t?.activity,message:`Vega open does not support Android activity selection.`,hint:`Remove --activity and use the Vega component ID as the open target.`},{matches:(e,t)=>!!t?.launchConsole,message:`Vega open does not support launch-console output.`,hint:`Remove --launch-console and open the Vega component ID directly.`},{matches:(e,t)=>!!t?.terminateRunningApp,message:`Vega open does not support terminating the running app before launch.`,hint:`Close the Vega component explicitly before opening it again.`},{matches:(e,t)=>!!t?.launchArgs?.length,message:`Vega open does not support launch arguments.`,hint:`Remove --launch-arg values and open the Vega component ID directly.`}];function f(e,t){return{...a(`Vega OS`),open:async(t,n)=>{p(t,n),await s(e,t)},openDevice:()=>c(e),close:t=>l(e,t),back:()=>u(e,`back`),home:()=>u(e,`home`),tvRemote:(t,n)=>u(e,t,n)}}function p(t,n){let r=d.find(({matches:e})=>e(t,n));if(r)throw new e(`UNSUPPORTED_OPERATION`,r.message,{hint:r.hint})}export{f as createVegaInteractor};
1
+ import{A as e}from"./sdk-contracts.js";import{i as t}from"./sdk-batch-runner.js";import{a as n}from"./exec.js";import{o as r}from"./tv-remote.js";import"./command.js";import{t as i}from"./tool-provider3.js";function a(t){let n=async n=>{throw new e(`UNSUPPORTED_OPERATION`,`${n} is not supported on ${t}`)};return{open:()=>n(`open`),openDevice:()=>n(`openDevice`),close:()=>n(`close`),tap:()=>n(`tap`),longPress:()=>n(`longPress`),focus:()=>n(`focus`),type:()=>n(`type`),fill:()=>n(`fill`),scroll:()=>n(`scroll`),screenshot:()=>n(`screenshot`),snapshot:()=>n(`snapshot`),back:()=>n(`back`),setOrientation:()=>n(`setOrientation`),setSetting:()=>n(`setSetting`)}}const o={allowFailure:!0,timeoutMs:3e4};async function s(e,t){n(await i().launchApp(e.id,t,o),`Failed to launch Vega app ${t}`,{appName:t,deviceId:e.id})}async function c(e){n(await i().checkConnected(e.id,o),`Vega device is not connected`,{deviceId:e.id})}async function l(e,t){n(await i().terminateApp(e.id,t,o),`Failed to terminate Vega app ${t}`,{appName:t,deviceId:e.id})}async function u(e,t,a){let o=r(t);n(await i().pressRemote(e.id,o,a,{allowFailure:!0,timeoutMs:1e4+(a??0)}),`Failed to press Vega TV remote ${t}`,{button:t,deviceId:e.id})}const d=[{matches:(e,n)=>t(e)||!!n?.url,message:`Vega open does not support URLs or deep links.`,hint:`Use open <component-id> with an installed Vega app component ID.`},{matches:(e,t)=>!!t?.activity,message:`Vega open does not support Android activity selection.`,hint:`Remove --activity and use the Vega component ID as the open target.`},{matches:(e,t)=>!!t?.launchConsole,message:`Vega open does not support launch-console output.`,hint:`Remove --launch-console and open the Vega component ID directly.`},{matches:(e,t)=>!!t?.terminateRunningApp,message:`Vega open does not support terminating the running app before launch.`,hint:`Close the Vega component explicitly before opening it again.`},{matches:(e,t)=>!!t?.launchArgs?.length,message:`Vega open does not support launch arguments.`,hint:`Remove --launch-arg values and open the Vega component ID directly.`}];function f(e,t){return{...a(`Vega OS`),open:async(t,n)=>{p(t,n),await s(e,t)},openDevice:()=>c(e),close:t=>l(e,t),back:()=>u(e,`back`),home:()=>u(e,`home`),tvRemote:(t,n)=>u(e,t,n)}}function p(t,n){let r=d.find(({matches:e})=>e(t,n));if(r)throw new e(`UNSUPPORTED_OPERATION`,r.message,{hint:r.hint})}export{f as createVegaInteractor};