agent-device 0.21.2 → 0.21.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.2.apk → agent-device-android-ime-helper-0.21.4.apk} +0 -0
- package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.4.apk.sha256 +1 -0
- package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.2.manifest.json → agent-device-android-ime-helper-0.21.4.manifest.json} +4 -4
- package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.21.2.apk → agent-device-android-snapshot-helper-0.21.4.apk} +0 -0
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.4.apk.sha256 +1 -0
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.4.manifest.json +16 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunner/AgentDeviceRunnerApp.m +39 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSystemSurfaceHostPolicy.swift +9 -1
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+AXSnapshotFallback.swift +2 -1
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Alert.swift +10 -1
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandExecution.swift +26 -124
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandJournal.swift +46 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Lifecycle.swift +36 -4
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+MainThreadWork.swift +229 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Models.swift +15 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Snapshot.swift +4 -40
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotCapturePlan.swift +6 -40
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Transport.swift +30 -9
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests.swift +22 -6
- package/dist/src/adapter.js +1 -1
- package/dist/src/adb-executor.js +2 -2
- package/dist/src/adb-failure.js +1 -1
- package/dist/src/agent-browser-process-record.js +1 -1
- package/dist/src/agent-device-client.js +2 -2
- package/dist/src/api.js +3 -11
- package/dist/src/app-launch.js +1 -1
- package/dist/src/app-lifecycle.js +1 -1
- package/dist/src/app-log-reconnect.js +1 -1
- package/dist/src/archive.js +2 -2
- package/dist/src/auth.js +1 -1
- package/dist/src/back-mode.js +1 -1
- package/dist/src/cli-help.js +2 -2
- package/dist/src/cli.js +4 -4
- package/dist/src/client-metro-companion.js +1 -1
- package/dist/src/client-metro.js +1 -1
- package/dist/src/client-types.d.ts +70 -5
- package/dist/src/code-signature-cache.js +1 -1
- package/dist/src/command-schema.js +1 -1
- package/dist/src/command-tools.js +2 -2
- package/dist/src/command.js +1 -1
- package/dist/src/config.js +1 -1
- package/dist/src/connection-runtime.js +1 -1
- package/dist/src/connection.js +1 -1
- package/dist/src/contracts.js +1 -1
- package/dist/src/daemon-client-lifecycle.js +1 -1
- package/dist/src/daemon-registration.js +1 -1
- package/dist/src/daemon-resolution.js +1 -0
- package/dist/src/daemon-shutdown-report.js +1 -1
- package/dist/src/daemon.js +1 -1
- package/dist/src/device-claim-rule.js +1 -1
- package/dist/src/device-input-state.d.ts +10 -8
- package/dist/src/device-inventory-context.js +1 -1
- package/dist/src/device-session.js +1 -1
- package/dist/src/diagnostics.js +1 -1
- package/dist/src/error.js +2 -2
- package/dist/src/exec.js +1 -1
- package/dist/src/file.js +1 -1
- package/dist/src/find.js +1 -1
- package/dist/src/gesture-runtime.js +1 -1
- package/dist/src/harmonyos.js +1 -1
- package/dist/src/helper.js +1 -1
- package/dist/src/human-control-contract.js +1 -1
- package/dist/src/human-control.js +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/install-source-network-transport.js +1 -1
- package/dist/src/interaction.js +1 -1
- package/dist/src/interaction2.js +1 -1
- package/dist/src/interactor.js +4 -4
- package/dist/src/interactors.js +1 -1
- package/dist/src/internal/bin.js +1 -1
- package/dist/src/internal/daemon.js +2 -2
- package/dist/src/internal/png-worker.js +1 -1
- package/dist/src/ios-client.js +121 -7
- package/dist/src/ios-snapshot-adapter.js +1 -1
- package/dist/src/ios-system-surface.js +1 -1
- package/dist/src/lease-scope.js +1 -1
- package/dist/src/limrun-delta-sync-omitted.js +1 -0
- package/dist/src/limrun.d.ts +0 -1598
- package/dist/src/location-coordinates.js +1 -1
- package/dist/src/mechanics.js +16 -16
- package/dist/src/output-common.js +2 -0
- package/dist/src/owner-identity.js +1 -1
- package/dist/src/perf-runtime-operation-builder.js +1 -1
- package/dist/src/perf-runtime-plan.js +1 -1
- package/dist/src/physical-device-control.js +1 -1
- package/dist/src/platform-request-scope.js +1 -1
- package/dist/src/platform-runtime-android-adb-host.js +1 -1
- package/dist/src/platform-runtime-app-log-android-transport.js +1 -1
- package/dist/src/platform-runtime-app-log-process.js +1 -1
- package/dist/src/platform-runtime-host.js +1 -1
- package/dist/src/platform-runtime-operation-host.js +2 -2
- package/dist/src/platform-runtime-screen-recording-android-host.js +1 -1
- package/dist/src/platform-runtime-screen-recording-finalizer-host.js +1 -1
- package/dist/src/platform-runtime-screen-recording-harmony-host.js +1 -1
- package/dist/src/platform-runtime-screen-recording-output-host.js +1 -1
- package/dist/src/platform-runtime-screen-recording-process-host.js +1 -1
- package/dist/src/platform-runtime.js +1 -1
- package/dist/src/process.js +1 -1
- package/dist/src/provider-webdriver.js +1 -1
- package/dist/src/proxy.js +1 -1
- package/dist/src/quality-warnings.js +1 -1
- package/dist/src/react-native.js +1 -1
- package/dist/src/record-runtime.js +1 -1
- package/dist/src/recording-stop-observation.js +1 -0
- package/dist/src/register-builtins.js +1 -1
- package/dist/src/registry.js +35 -36
- package/dist/src/replay-divergence.js +1 -1
- package/dist/src/reporting.js +11 -9
- package/dist/src/request-providers.js +1 -1
- package/dist/src/result-serialization.js +1 -1
- package/dist/src/runner-cache-metadata.js +2 -2
- package/dist/src/runner-client.js +1 -1
- package/dist/src/runner-disposal.js +1 -1
- package/dist/src/runner-operations-facade.js +1 -1
- package/dist/src/runner.js +1 -1
- package/dist/src/runtime.js +3 -3
- package/dist/src/runtime10.js +1 -1
- package/dist/src/runtime2.js +4 -4
- package/dist/src/runtime3.js +1 -1
- package/dist/src/runtime4.js +5 -5
- package/dist/src/runtime5.js +1 -1
- package/dist/src/runtime6.js +1 -1
- package/dist/src/runtime9.js +1 -1
- package/dist/src/screen-recording-completion.js +1 -1
- package/dist/src/screen-recording-resource-recovery.js +1 -1
- package/dist/src/screen-recording-runtime.js +1 -1
- package/dist/src/screenshot-result.js +1 -1
- package/dist/src/screenshot-runtime.js +1 -1
- package/dist/src/sdk-batch.js +2 -2
- package/dist/src/sdk-contracts.js +2 -2
- package/dist/src/sdk-remote-config.d.ts +1 -0
- package/dist/src/sdk-remote-config.js +1 -1
- package/dist/src/sdk-selectors.d.ts +36 -24
- package/dist/src/selector-runtime.js +1 -1
- package/dist/src/session-observation.js +1 -1
- package/dist/src/session-routing.js +1 -1
- package/dist/src/session-snapshot.js +1 -1
- package/dist/src/session-store.js +2 -2
- package/dist/src/session2.js +5 -5
- package/dist/src/simulator.js +1 -1
- package/dist/src/snapshot-runtime-binding.js +1 -1
- package/dist/src/snapshot-runtime.js +1 -1
- package/dist/src/snapshot.js +1 -1
- package/dist/src/snapshot4.js +1 -1
- package/dist/src/src3.js +1 -1
- package/dist/src/src4.js +1 -1
- package/dist/src/stop-sequence.js +1 -0
- package/dist/src/success-text.js +1 -1
- package/dist/src/text-entry-focus.js +1 -0
- package/dist/src/tool-provider.js +1 -1
- package/dist/src/tool-provider2.js +1 -1
- package/dist/src/tool-provider3.js +1 -1
- package/dist/src/type-text-runtime.js +1 -1
- package/dist/src/video.js +2 -2
- package/dist/src/yauzl.js +1 -0
- package/package.json +2 -2
- package/server.json +2 -2
- package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.2.apk.sha256 +0 -1
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.2.apk.sha256 +0 -1
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.2.manifest.json +0 -17
- package/dist/src/audio-probe-support.js +0 -1
- package/dist/src/config2.js +0 -1
- package/dist/src/provider-device-runtime.js +0 -1
- package/dist/src/screen-recording-live-handle.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{C as e}from"./sdk-contracts.js";import
|
|
1
|
+
import{C as e}from"./sdk-contracts.js";import t from"node:crypto";function n(e){return(e??``).trim().toLowerCase()===`tenant`?`tenant`:`none`}function r(e){if(!e)return;let t=e.trim();if(t&&/^[a-zA-Z0-9._-]{1,128}$/.test(t))return t}const i=`default`;function a(t){let n=Number.isInteger(t.defaultLeaseTtlMs)?Math.max(1,Number(t.defaultLeaseTtlMs)):6e4,r=Number.isInteger(t.minLeaseTtlMs)?Math.max(1,Number(t.minLeaseTtlMs)):5e3,i=Number.isInteger(t.maxLeaseTtlMs)?Math.max(r,Number(t.maxLeaseTtlMs)):6e5;return t=>{if(!Number.isInteger(t))return n;let a=Number(t);if(a<r||a>i)throw new e(`INVALID_ARGS`,`Lease ttlMs must be between ${r} and ${i}.`);return a}}function o(e){if(!e)return;let t=e.trim();if(t&&/^[a-zA-Z0-9._-]{1,128}$/.test(t))return t}function s(e){if(!e)return;let t=e.trim();if(t&&/^[a-f0-9]{16,128}$/i.test(t))return t.toLowerCase()}function c(t){let n=s(t);if(!n)throw new e(`INVALID_ARGS`,`Invalid lease id.`);return n}function l(t){let n=(t??``).trim().toLowerCase();if(!n||n===`ios-simulator`)return`ios-simulator`;if(n===`ios-instance`||n===`android-instance`||n===`harmonyos-instance`)return n;throw new e(`INVALID_ARGS`,`Unsupported lease backend: ${t??``}`)}function u(t){if(t===void 0)return;let n=t.trim();if(!n||n.length>256||!/^[\u0020-\u007E]+$/.test(n))throw new e(`INVALID_ARGS`,`Invalid device key. Use 1-256 printable characters.`);return n}function d(e){return p(e,`client id`,128)}function f(e){return p(e,`lease provider`,64)}function p(t,n,r){if(t===void 0)return;let i=t.trim();if(!i||i.length>r||!/^[a-zA-Z0-9._-]+$/.test(i))throw new e(`INVALID_ARGS`,`Invalid ${n}. Use 1-${String(r)} chars: letters, numbers, dot, underscore, hyphen.`);return i}function m(t){let n=r(t);if(!n)throw new e(`INVALID_ARGS`,`Invalid tenant id. Use 1-128 chars: letters, numbers, dot, underscore, hyphen.`);return n}function h(t){let n=o(t);if(!n)throw new e(`INVALID_ARGS`,`Invalid run id. Use 1-128 chars: letters, numbers, dot, underscore, hyphen.`);return n}function g(e){return{backend:l(e.leaseBackend),leaseProvider:f(e.leaseProvider),deviceKey:u(e.deviceKey),clientId:d(e.clientId),tenantId:m(e.tenantId),runId:h(e.runId),ttlMs:e.ttlMs}}function _(e){return!!(e.leaseProvider??e.deviceKey??e.clientId)}function v(e,t){return!t.tenantId||!t.runId?!1:[[e.leaseProvider,t.leaseProvider],[e.deviceKey,t.deviceKey],[e.clientId,t.clientId]].every(([e,t])=>!e||!!t)}function y(t,n){let r=x(n);if(r.tenantId&&t.tenantId!==r.tenantId||r.runId&&t.runId!==r.runId||r.leaseBackend&&t.backend!==r.leaseBackend||r.leaseProvider&&t.leaseProvider!==r.leaseProvider||r.deviceKey&&t.deviceKey!==r.deviceKey||r.clientId&&t.clientId!==r.clientId)throw new e(`UNAUTHORIZED`,`Lease does not match tenant/run scope`,{reason:`LEASE_SCOPE_MISMATCH`})}function b(t){let n=l(t.leaseBackend),i=r(t.tenantId);if(!i)throw new e(`INVALID_ARGS`,`tenant isolation requires tenant id.`);let a=o(t.runId);if(!a)throw new e(`INVALID_ARGS`,`tenant isolation requires run id.`);let c=s(t.leaseId);if(!c)throw new e(`INVALID_ARGS`,`tenant isolation requires lease id.`);return{...t,tenantId:i,runId:a,leaseId:c,leaseBackend:n}}function x(t){let n=r(t.tenantId),i=o(t.runId);if(t.tenantId&&!n)throw new e(`INVALID_ARGS`,`Invalid tenant id. Use 1-128 chars: letters, numbers, dot, underscore, hyphen.`);if(t.runId&&!i)throw new e(`INVALID_ARGS`,`Invalid run id. Use 1-128 chars: letters, numbers, dot, underscore, hyphen.`);return{tenantId:n,runId:i,leaseBackend:t.leaseBackend?l(t.leaseBackend):void 0,leaseProvider:f(t.leaseProvider),deviceKey:u(t.deviceKey),clientId:d(t.clientId)}}function S(t,n){if(_(t)&&!v(t,n))throw new e(`UNAUTHORIZED`,`Lease owner scope is required`,{reason:`LEASE_SCOPE_REQUIRED`})}function C(e){if(e.deviceKey)return JSON.stringify([e.backend,e.leaseProvider??i,e.deviceKey])}function w(e){return JSON.stringify([e.tenantId,e.runId,e.backend,e.leaseProvider??i,e.deviceKey??`*`])}function T(e,n,r){return{leaseId:t.randomBytes(16).toString(`hex`),tenantId:e.tenantId,runId:e.runId,backend:e.backend,...e.leaseProvider?{leaseProvider:e.leaseProvider}:{},...e.deviceKey?{deviceKey:e.deviceKey}:{},...e.clientId?{clientId:e.clientId}:{},createdAt:r,heartbeatAt:r,expiresAt:r+n}}function E(t){return new e(`DEVICE_IN_USE`,`Device is already leased`,{reason:`DEVICE_LEASE_BUSY`,deviceKey:t.deviceKey,backend:t.backend,leaseProvider:t.leaseProvider,expiresAt:t.expiresAt,hint:`Retry after the lease expires or close the owning session.`})}const D=`/admin/human-control/holds`;function O(t){let n=A(t,`Human-control request body`),r=n.reason;if(r!==void 0&&(typeof r!=`string`||r.trim().length>512))throw new e(`INVALID_ARGS`,`Human-control reason must be at most 512 characters.`);let i=n.ttlMs;if(i!==void 0&&(typeof i!=`number`||!Number.isInteger(i)||i<1e3||i>864e5))throw new e(`INVALID_ARGS`,`Human-control ttlMs must be between 1000 and 86400000.`);return{...n.scope===void 0?{}:{scope:k(n.scope)},...typeof r==`string`&&r.trim()?{reason:r.trim()}:{},...typeof i==`number`?{ttlMs:i}:{}}}function k(t){let n=A(t,`Host human-control scope`);if(typeof n.backend!=`string`||!n.backend.trim()||typeof n.deviceKey!=`string`)throw new e(`INVALID_ARGS`,`Host human control requires scope.backend and scope.deviceKey.`);if(n.leaseProvider!==void 0&&typeof n.leaseProvider!=`string`)throw new e(`INVALID_ARGS`,`scope.leaseProvider must be a string.`);let r=f(n.leaseProvider);return{backend:l(n.backend),deviceKey:u(n.deviceKey),...r?{leaseProvider:r}:{}}}function A(t,n){if(!t||typeof t!=`object`||Array.isArray(t))throw new e(`INVALID_ARGS`,`${n} must be an object.`);return t}function j(t){let n=typeof t==`string`?t.trim():``;if(!/^[a-zA-Z0-9._-]{1,128}$/.test(n))throw new e(`INVALID_ARGS`,`Invalid human-control hold id. Use 1-128 chars: letters, numbers, dot, underscore, hyphen.`);return n}function M(e){return{...e,scope:{...e.scope}}}function N(t){return new e(`DEVICE_IN_USE`,`A human is interacting with this simulator or device; agent interactions are temporarily disabled.`,{reason:`human_control_active`,blockedBy:`human_control`,holdId:t.id,deviceKey:t.scope.deviceKey,pausedAt:new Date(t.createdAt).toISOString(),...t.expiresAt===void 0?{}:{expiresAt:new Date(t.expiresAt).toISOString()},...t.reason?{humanReason:t.reason}:{},hint:`Wait until the human-control hold is released before retrying.`})}export{r as _,O as a,T as c,C as d,w as f,c as g,s as h,j as i,a as l,b as m,M as n,S as o,g as p,N as r,y as s,D as t,E as u,n as v};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{C as e}from"./sdk-contracts.js";import{
|
|
1
|
+
import{C as e}from"./sdk-contracts.js";import{a as t}from"./human-control-contract.js";import{r as n}from"./request-cancel.js";import"./request.js";async function r(t){let{req:r,registry:s}=t,c=r.internal?.admittedLease;if(!c)throw new e(`UNAUTHORIZED`,`Human control requires an admitted remote lease.`);let l={kind:`lease`,leaseId:c.leaseId},u=r.positionals??[],[d,f=``,p=``]=u;switch(d){case`list`:return a(u,1),{ok:!0,data:{holds:s.listHumanControlHolds(l)}};case`put`:return a(u,3),{ok:!0,data:{hold:await s.putHumanControlHold(l,f,i(p),n(r.meta?.requestId)),state:`active`}};case`remove`:{a(u,2);let e=s.removeHumanControlHold(l,f);return{ok:!0,data:{released:!!e,...e?{hold:e}:{}}}}default:throw o()}}function i(n){let r;try{r=JSON.parse(n)}catch(t){throw new e(`INVALID_ARGS`,`Human-control payload must be valid JSON.`,void 0,t)}return t(r)}function a(e,t){if(e.length!==t)throw o()}function o(){return new e(`INVALID_ARGS`,`human_control requires list, put <id> <payload>, or remove <id>.`)}export{r as handleHumanControlCommand};
|
package/dist/src/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{C as e,
|
|
1
|
+
import{C as e,M as t,k as n,p as r}from"./sdk-contracts.js";import{n as i}from"./agent-device-client.js";import{t as a}from"./sdk-io.js";export{e as AppError,r as centerOfRect,i as createAgentDeviceClient,a as createLocalArtifactAdapter,n as isAgentDeviceError,t as normalizeAgentDeviceError};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e,t}from"./rolldown-runtime.js";import{A as n,C as r,T 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 r(`INVALID_ARGS`,`Unsupported source URL protocol: ${e.protocol}`);if(e.username||e.password)throw new r(`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 n(e)?e:new r(`INVALID_ARGS`,`Source URL host could not be resolved: ${i}`,{hint:`Use a public artifact URL.`},e)}if(s.length===0)throw new r(`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 r(`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 r(`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)=>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{C as n,T as r,j 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)=>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};
|
package/dist/src/interaction.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e,p as t,s as n}from"./session-snapshot.js";import{p as r}from"./quality-warnings.js";import{t as i}from"./backend-snapshot-options.js";import{a,i as o,n as s,o as c,r as l}from"./interaction-ref-policy.js";async function u(e){let{session:t,flags:n,contextFromFlags:a,options:o}=e,s={...n??{},...i(o)},c=a(s,t.appBundleId,t.trace?.outPath),l=await e.capture({flags:s,options:o,context:c});return r(l.snapshotQuality)||e.publishSnapshot(l),l}const d=async(r,i,a,o,s)=>await u({session:r,flags:i,contextFromFlags:o,options:s,capture:async({flags:e,options:i,context:a})=>{let{snapshot:o}=await n({device:r.device,session:r,flags:e,outPath:e.out,logPath:a.logPath??``,includeRects:i.includeRects,androidFreshnessMode:i.androidFreshnessMode,signal:i.signal,...i.boundCapture?{captureData:async()=>await i.boundCapture(t({flags:e,session:r,snapshotScope:e.snapshotScope,includeRects:i.includeRects,signal:i.signal,context:a}))}:{}});return o},publishSnapshot:t=>{e(r,t),a.set(r
|
|
1
|
+
import{i as e,p as t,s as n}from"./session-snapshot.js";import{p as r}from"./quality-warnings.js";import{t as i}from"./backend-snapshot-options.js";import{a,i as o,n as s,o as c,r as l}from"./interaction-ref-policy.js";async function u(e){let{session:t,flags:n,contextFromFlags:a,options:o}=e,s={...n??{},...i(o)},c=a(s,t.appBundleId,t.trace?.outPath),l=await e.capture({flags:s,options:o,context:c});return r(l.snapshotQuality)||e.publishSnapshot(l),l}const d=async(r,i,a,o,s)=>await u({session:r,flags:i,contextFromFlags:o,options:s,capture:async({flags:e,options:i,context:a})=>{let{snapshot:o}=await n({device:r.device,session:r,flags:e,outPath:e.out,logPath:a.logPath??``,includeRects:i.includeRects,androidFreshnessMode:i.androidFreshnessMode,signal:i.signal,...i.boundCapture?{captureData:async()=>await i.boundCapture(t({flags:e,session:r,snapshotScope:e.snapshotScope,includeRects:i.includeRects,signal:i.signal,context:a}))}:{}});return o},publishSnapshot:t=>{e(r,t),a.set(a.resolveStoredSessionName(r),r)}});function f(e){return a({...e,captureSnapshotForSession:e.captureSnapshotForSession??d})}async function p(e){return(await import(`./find.js`)).handleFindCommands(e)}async function m(e){return await(await import(`./interaction2.js`)).handleInteractionCommands({...e,captureSnapshotForSession:e.captureSnapshotForSession??d})}export{d as captureSnapshotForSession,f as createInteractionRuntime,c as finalizeTouchInteraction,p as handleFindCommands,m as handleInteractionCommands,l as readSettleRequest,s as refMutationAdmissionResponse,o as settleFlagGuardResponse};
|
package/dist/src/interaction2.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{C as e,M as t,P as n,c as r,w as i,x as a}from"./sdk-contracts.js";import{f as o}from"./sdk-batch-runner.js";import{u as s,v as c}from"./sdk-device.js";import{C as l,h as u,m as d,p as f}from"./sdk-batch.js";import{c as p,o as ee}from"./scroll-gesture.js";import{C as m,E as te,S as ne,v as re,x as h}from"./script.js";import{N as ie,f as g}from"./parameterized-recorded-fill.js";import{S as ae,u as oe}from"./runtime.js";import{n as _}from"./catalog.js";import{n as se}from"./success-text.js";import{i as v,n as ce,r as le}from"./click-button.js";import{r as ue,t as de}from"./interaction-positionals.js";import{r as y}from"./diagnostics.js";import{t as fe}from"./timeouts.js";import"./diagnostics2.js";import"./retry.js";import"./gesture-plan.js";import{r as pe}from"./request-cancel.js";import"./request.js";import{a as b,i as x,s as S}from"./request-runtime-binding.js";import{D as C,E as w,d as me,n as he,r as T,t as ge,u as _e,w as ve}from"./session-snapshot.js";import{n as E,t as ye}from"./touch-reference-frame.js";import{m as be,p as xe}from"./quality-warnings.js";import{i as Se,r as D}from"./internal/daemon.js";import{a as Ce,c as we,i as O,l as Te,n as k,o as A,r as j,s as Ee,t as De}from"./interaction-ref-policy.js";import{t as M}from"./gesture-runtime.js";import{_ as N,d as Oe,f as ke,i as Ae,r as je}from"./selector-runtime.js";import{n as Me}from"./type-text-runtime.js";function Ne(t){let n=t.flags?.recordAs;if(n!==void 0){if(ie(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 P(e,t){if(!ve(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){y({level:`warn`,phase:`android_ref_snapshot_refresh_failed`,data:{command:e.req.command,error:t instanceof Error?t.message:String(t)}})}return n}function F(e,t){return!s(e.device)||e.surface!==`desktop`&&e.surface!==`menubar`||e.surface===`menubar`&&(t===`click`||t===`press`)?null:x(`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 Pe=new Set(u()),Fe=new Set([`currentUptimeMs`,`gestureEndUptimeMs`,`gestureStartUptimeMs`,`sequenceResults`]);function I(e){if(e)return Object.fromEntries(Object.entries(e).filter(([e])=>!Fe.has(e)))}function Ie(e){return Re({fields:Le(e.command),input:e.input??{},data:I(e.data),controlledFields:Pe})}function Le(e){let t=l(e);if(!t)throw Error(`Missing response data transform descriptor for ${e}`);return t.fields}function Re(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 ze(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&&!S(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=ye(t.snapshot);if(l)return s.setTouchReferenceFrame(l),l;let u=await a(t,n,r,i,{interactiveOnly:!0}),d=ye(u);return d&&s.setTouchReferenceFrame(d),d}async function Be(e){try{return await ze(e)}catch(t){y({level:`warn`,phase:`touch_reference_frame_resolve_failed`,data:{platform:e.session.device.platform,error:t instanceof Error?t.message:String(t)}});return}}function L(e){let{data:t,fallbackX:n,fallbackY:r,referenceFrame:i,extra:a}=e,o=He(a,n,r)??(typeof t?.message==`string`?t.message:void 0);return Ve({...t??{},...n===void 0||r===void 0?{}:{x:n,y:r},...i??{},...a??{},...se(o)})}function Ve(e){return Object.fromEntries(Object.entries(e).filter(([,e])=>e!==void 0))}function He(e,t,n){let r=R(e,`text`);if(r!==void 0)return`Filled ${Array.from(r).length} chars`;let i=Ue(t,n),a=We(e);if(a)return Ke(a,e??{},i);if(i)return Ge(e,i)}function R(e,t){let n=e?.[t];return typeof n==`string`?n:void 0}function Ue(e,t){return e===void 0||t===void 0?``:` (${e}, ${t})`}function We(e){let t=R(e,`ref`);return t===void 0?R(e,`selector`):`@${t}`}function Ge(e,t){return e?.gesture===`longpress`?`Long pressed${t}`:e?.gesture===`hover`?`Hovered${t}`:`Tapped${t}`}function Ke(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 z(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 B(e,t){let n=z(e);if(n)return{ok:!0,target:{kind:`point`,x:n.x,y:n.y}};let r=e[0]??``;if(r.startsWith(`@`)){let t=N(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:x(`INVALID_ARGS`,`${t} requires @ref, selector expression, or x y coordinates`)}}function qe(e){let t=z(e);if(t)return{ok:!0,target:{kind:`point`,x:t.x,y:t.y},...$e(e[2])};let n=Qe(e),r=B(n.targetPositionals,`longpress`);return r.ok?{ok:!0,target:r.target,refGeneration:r.refGeneration,...n.duration}:r}function V(e){return{ok:!1,response:x(`INVALID_ARGS`,`fill requires text after ${e} (use "" to clear the field)`)}}function Je(e){let t=Ye(e);if(!t)return{ok:!1,response:x(`INVALID_ARGS`,`fill requires x y text, @ref text, or selector text`)};switch(t.kind){case`ref`:{let n=N(e[0]??``);return n.ok?t.text===void 0?V(`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?V(`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()?V(`selector`):{ok:!0,target:{kind:`selector`,selector:t.target.selector},text:t.text}}}function Ye(e){try{return de(e)}catch{return null}}function Xe(e){let t=`evidence`in e?e.evidence:void 0,n=e.settle;return e.kind===`ref`?{ref:ue(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 Ze(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 Qe(e){let t=e.at(-1);return e.length>1&&et(t)?{targetPositionals:e.slice(0,-1),duration:{durationMs:Number(t)}}:{targetPositionals:e,duration:{}}}function $e(e){return e===void 0?{}:{durationMs:Number(e)}}function et(e){return e===void 0||e.trim()===``?!1:Number.isFinite(Number(e))}const tt={source:`direct-ios`,kind:`not-observed`};function H(e,t){if(!nt(e))return t;let{resolution:n,...r}=t;return r}function nt(e){return`dispatchPath`in e&&e.dispatchPath===`maestro-non-hittable-fallback`}function U(e){return W({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 W(e){let{source:t,referenceFrame:n,extra:r}=e;if(t.kind===`runner-payload`||t.kind===`corroborated-tap`){let e={targetKind:t.targetKind,...H(t,{resolution:t.kind===`runner-payload`?tt:t.resolution}),...r??{}};return{result:L({data:t.data,fallbackX:t.point?.x,fallbackY:t.point?.y,referenceFrame:n,extra:e}),responseData:L({data:t.publicData,fallbackX:t.point?.x,fallbackY:t.point?.y,referenceFrame:n,extra:e})}}let{result:i}=t,a={targetKind:i.kind,...H(t,Xe(i)),...at(i.settle,e.settleRefsGeneration),...r??{}},o=L({data:i.backendResult,fallbackX:i.point?.x,fallbackY:i.point?.y,referenceFrame:n,extra:{...a,...it(i)}}),s=L({data:t.publicData,fallbackX:i.point?.x,fallbackY:i.point?.y,referenceFrame:n,extra:a}),c=ot(`warning`in i?i.warning:void 0,e.staleRefsWarning);return c&&(o.warning=c,s.warning=c),{result:o,responseData:s,...rt(i)}}function rt(e){let t=G(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 it(e){let t=G(e);return t?{selectorChain:t.selectorChain,refLabel:t.refLabel}:{}}function G(e){return`recordingTarget`in e?e.recordingTarget:void 0}function at(e,t){return!e?.diff||t===void 0?{}:{settle:{...e,refsGeneration:t}}}function ot(e,t){return t?e?`${e} ${t}`:t:e}async function st(e){let{params:t,session:n,result:r,publicData:i,extra:a}=e,o=r.kind===`point`?await Be({session:n,flags:t.req.flags,sessionStore:t.sessionStore,contextFromFlags:t.contextFromFlags,captureSnapshotForSession:t.captureSnapshotForSession,observation:t.androidObservation}):E(n.snapshot?.nodes??[]);return W({source:{kind:`runtime`,result:r,publicData:i},referenceFrame:o,extra:a,staleRefsWarning:e.staleRefsWarning,settleRefsGeneration:ge(n,r.settle)})}function K(e){return e.command?Ie({command:e.command,input:e.flags,data:e.data}):I(e.data)}function ct(e,t){return e===`click`||e===`press`||e===`fill`?e:t}function q(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 J(e){return[String(e.x),String(e.y)]}function lt(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 ut(t,n,r){let i=await Oe(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 dt(e){return e.code===`COMMAND_FAILED`&&typeof e.details?.expectedPackage==`string`&&typeof e.details?.foregroundPackage==`string`}async function Y(e){if(!ft(e))return;let t=mt(e.session.snapshot);if(!t)return;let n=await ht(e,t.snapshot.snapshotQuality,t.presentation);if(!(!n||!gt(t.snapshot,n,e.command)))return yt(t.snapshot,n,e.command)}function ft(e){return pt(e.command)&&i(e.error).code===`XCTEST_RECORDED_FAILURE`&&we(e.session,{skipPendingPostGestureStabilization:!1})}function pt(e){return e===`click`||e===`press`}function mt(e){if(!X(e))return;let t=Date.now()-e.createdAt;if(t<0||t>15e3){y({level:`debug`,phase:`ios_tap_failure_corroboration_stale_baseline`,data:{ageMs:t}});return}let n=bt(e.presentationKey);if(n){if(n.raw){y({level:`debug`,phase:`ios_tap_failure_corroboration_raw_baseline`,data:{presentationKey:e.presentationKey}});return}return{snapshot:e,presentation:n}}}async function ht(e,t,n){try{let r=be(t);return await e.captureSnapshotForSession(e.session,Tt(e.flags,n),e.sessionStore,e.contextFromFlags,{interactiveOnly:n?.interactiveOnly??!0,...r?{preferredBackend:r}:{},signal:pe(e.requestId)})}catch(t){y({level:`debug`,phase:`ios_tap_failure_corroboration_capture_failed`,data:{command:e.command,error:t instanceof Error?t.message:String(t)}});return}}function gt(e,t,n){let r=_t(e,t);return r===void 0?vt(e,t,n):r?!0:(y({level:`debug`,phase:`ios_tap_failure_corroboration_identity_mismatch`,data:{command:n}}),!1)}function _t(e,t){if(e.comparisonKey!==void 0||t.comparisonKey!==void 0)return e.comparisonKey!==void 0&&e.comparisonKey===t.comparisonKey}function vt(e,t,n){let r=e.snapshotQuality?.backend,i=t.snapshotQuality?.backend;return!r||r!==i?(y({level:`debug`,phase:`ios_tap_failure_corroboration_backend_mismatch`,data:{command:n,baselineBackend:r,afterBackend:i}}),!1):e.presentationKey===t.presentationKey||(y({level:`debug`,phase:`ios_tap_failure_corroboration_scope_mismatch`,data:{command:n,baselinePresentationKey:e.presentationKey,afterPresentationKey:t.presentationKey}}),!1)}function yt(e,t,n){if(!X(t))return;let r=oe(e.nodes),i=oe(t.nodes);if(r.digest!==i.digest)return y({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 X(e){return!!(e&&e.nodes.length>0&&!xe(e.snapshotQuality))}function bt(e){if(!e)return;let t;try{t=JSON.parse(e)}catch{return}return xt(t)}function xt(e){let t=St(e);if(!(!t||typeof t.interactiveOnly!=`boolean`||typeof t.raw!=`boolean`)&&!(!Ct(t.depth)||!wt(t.scope)))return{interactiveOnly:t.interactiveOnly,...typeof t.depth==`number`?{depth:t.depth}:{},...typeof t.scope==`string`?{scope:t.scope}:{},raw:t.raw}}function St(e){return typeof e==`object`&&e?e:void 0}function Ct(e){return e==null||typeof e==`number`}function wt(e){return e==null||typeof e==`string`}function Tt(e,t){if(!(!e&&!t))return{...e??{},out:void 0,...t?{snapshotDepth:t.depth,snapshotScope:t.scope,snapshotRaw:t.raw}:{}}}function Et(e){return e.kind===`selector`?{selector:e.selector}:e.kind===`ref`?{ref:e.ref.startsWith(`@`)?e.ref.slice(1):e.ref}:{}}async function Dt(e,t,n,r,i){if(e.lease?.leaseProvider)return{aborted:!1,readiness:{status:`clear`},runtimeResult:await r()};let a=await D({session:e,command:t,phase:`before-command`,observation:i});if(n.refContext&&a.status===`recovered`){let t=k({ref:n.refContext.ref,mintedGeneration:n.refContext.mintedGeneration,staleRefsWarning:n.refContext.staleRefsWarning,frame:C({session:e,ref:n.refContext.ref,mintedGeneration:n.refContext.mintedGeneration})});if(t)return{aborted:!0,response:t}}let o=await r();return await D({session:e,command:t,phase:`after-command`,observation:i}),{aborted:!1,readiness:a,runtimeResult:o}}async function Z(e,t){let n=e.sessionStore.get(e.sessionName);if(!n)return b();let r=Ce({...e,touchExecutor:t.touchExecutor}),a=Date.now();try{let i,o=await Dt(n,e.req.command,{refContext:t.refContext},async()=>{let e=await t.run(r);return i=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]:[],...i?[i]:[]];if(p.length>0){let e=[...typeof d.warning==`string`?[d.warning]:[],...p].join(` `);u.warning=e,d.warning=e}return A({session:n,sessionStore:e.sessionStore,command:e.req.command,positionals:e.req.positionals??[],retryPositionals:Mt(e.req.command,c),flags:e.req.flags,result:u,responseData:d,recordedTarget:f,actionStartedAt:a,actionFinishedAt:l,androidFreshnessBaseline:t.androidFreshnessBaseline})}catch(r){let o=lt({error:i(r),snapshotGeneration:n.snapshotGeneration,publishPartialRefs:e=>he(n,e)});if(dt(o))throw o;return o.code===`AMBIGUOUS_MATCH`?jt(o):await Ot({error:o,handlerParams:e,session:n,target:t.iosTapCorroboration?.target,extra:t.iosTapCorroboration?.extra,actionStartedAt:a,androidFreshnessBaseline:t.androidFreshnessBaseline})||jt(o)}}async function Ot(e){if(!e.target)return;let t=ae(e.error);if(!t&&g(e.session))return;let n=await Y({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=kt({target:e.target,resolvedTarget:t,warning:n.warning,referenceFrame:E(e.session.snapshot?.nodes??[]),extra:e.extra});return A({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 kt(e){return e.resolvedTarget?W({source:{kind:`runtime`,result:{...e.resolvedTarget,warning:e.warning}},referenceFrame:e.referenceFrame,extra:e.extra}):U({targetKind:e.target.kind,point:At(e.target),warning:e.warning,referenceFrame:e.referenceFrame,extra:{...Et(e.target),...e.extra??{}}})}function At(e){return e.kind===`point`?{x:e.x,y:e.y}:void 0}function jt(e){return{ok:!1,error:t(e)}}function Mt(e,t){if(!(t.kind===`ref`&&!t.node)&&(e===`click`||e===`press`))return t.point?J(t.point):void 0}async function Nt(e,t,n,r){let i=await me({device:t.device,command:n,requiresCapture:r,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});return i.ok?{ok:!0,touchExecutor:_e(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=F(i,`fill`);if(e)return e}if(!i)return b();let a=Je(t.positionals??[]);if(!a.ok)return a.response;let o=await Nt(e,i,`fill`,a.target.kind!==`point`);if(!o.ok)return o.response;let{touchExecutor:s}=o;Ne({flags:t.flags,replayPlanStep:t.internal?.replayPlanStep===!0,isSessionRecording:g(i)});let c=O(`fill`,t.flags);if(c)return c;let l=await Ft(e,i,a.target,a.refGeneration);if(l.response)return l.response;let{staleRefsWarning:u}=l,d=t.internal?.replayTargetGuard;return await Z(e,{touchExecutor:s,refContext:a.target.kind===`ref`&&t.internal?.findResolvedTarget===void 0?{ref:a.target.ref,mintedGeneration:a.refGeneration,staleRefsWarning:u}: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:j(t.flags),expectedResolvedTarget:d,preresolvedTarget:t.internal?.findResolvedTarget}),buildPayloads:e=>It({session:i,result:e,text:a.text,flags:t.flags,staleRefsWarning:u})})}async function Ft(e,t,n,r){if(n.kind!==`ref`)return{};let i=e.req.internal?.findResolvedTarget===void 0?T({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:k({ref:n.ref,mintedGeneration:r,staleRefsWarning:i,frame:C({session:t,ref:n.ref,mintedGeneration:r})});return o?{response:o,staleRefsWarning:i}:(await P(e,t),{staleRefsWarning:i})}function It(e){let{session:t,result:n}=e,r=q(e.flags?.maestro?.allowNonHittableCoordinateFallback===!0,n.backendResult),i=n.kind===`point`?void 0:E(t.snapshot?.nodes??[]);return W({source:{kind:`runtime`,result:n,publicData:K({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:ge(t,n.settle)})}async function Lt(e,n,r,i){let a=e,o={selector:r.raw},s=Date.now();w(n);try{let e=await i(r)??{},t=Date.now(),c=zt(e),l=K({command:ct(a.req.command,`press`),flags:a.req.flags,data:e}),u=q(r.allowNonHittableCoordinateFallback===!0,e),{result:d,responseData:f}=W({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 A({session:n,sessionStore:a.sessionStore,command:a.req.command,positionals:a.req.positionals??[],retryPositionals:J(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})||(Ee(e,{delegateSemanticFailures:r.allowNonHittableCoordinateFallback!==!0})?(y({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 Y({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}=U({targetKind:`selector`,warning:s.warning,resolution:{source:`direct-ios`,kind:`not-observed`},extra:i});return A({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`||g(t)||Wt(i)||d(n)&&i?.verify===!0||f(n)&&i?.settle===!0?null:Ht(t,r.selector,i)}function Ht(e,t,n){let r=Te({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:b()};let o=t===`click`?`click`:t,s=qt(a,t,o,n.flags);if(s)return{response:s};let c=n.positionals??[],l=t===`longpress`?qe(c):B(c,o);if(!l.ok)return{response:l.response};let u=Yt(a,n,l),d=Zt(e,a,t,l,u);if(d.response)return{response:d.response};let f=v(n.flags);return{admitted:{session:a,commandLabel:o,clickButton:f,resultButtonTag:ce(f),target:l.target,durationMs:t===`longpress`?l.durationMs:void 0,staleRefsWarning:u,refContext:Xt(n,l,u)}}}function qt(e,t,n,r){return F(e,n)||O(t,r)||Jt(e,t,n,r)}function Jt(e,t,n,r){let i=v(r);if(!Gt.has(t)||i===`primary`)return;let a=le({commandLabel:n,platform:c(e.device),button:i,count:r?.count,intervalMs:r?.intervalMs,holdMs:r?.holdMs,jitterPx:r?.jitterPx,doubleTap:r?.doubleTap});if(a)return x(a.code,a.message,a.details)}function Yt(e,t,n){if(n.target.kind===`ref`&&t.internal?.findResolvedTarget===void 0)return T({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:k({ref:r.target.ref,mintedGeneration:r.refGeneration,staleRefsWarning:i,frame:C({session:t,ref:r.target.ref,mintedGeneration:r.refGeneration})});return s?{response:s}:{}}async function Q(e,t){let n=await Kt(e,t);if(`response`in n)return n.response;let{admitted:r}=n,i=await Nt(e,r.session,t,r.target.kind!==`point`);if(!i.ok)return i.response;let{touchExecutor:a}=i,o=r.target.kind===`ref`?await P(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 Z(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 ut(a,Ze(o,t),e.androidObservation)},buildPayloads:async n=>{let i=tn(n);return await st({params:e,session:a,result:n,staleRefsWarning:c,publicData:K({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:j(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 un(e,`gesture`,async t=>on(e,t))}async function on(e,t){let n=te(e.req.input),r=fn(n,t);r.intent===`pan`&&e.req.internal?.gestureExecutionProfile&&(r.executionProfile=e.req.internal.gestureExecutionProfile);let i=await M({device:t.device,input:r,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});return i.ok?cn(n,r,await sn($(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:mn(e,i),flags:xn(e,r),responseData:nn(n,{executionProfile:dn(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 un(e,`swipe`,async t=>{let n=hn(e.req.input),r=await M({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 yn($(e,r.gestures),e,n,i,a,o);return{positionals:vn(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 $(e,t){return Ce({...e,gestures:t,pairedGestureViewport:e.req.internal?.gestureViewport})}async function un(e,n,r){let i=e.sessionStore.get(e.sessionName);if(!i)return b();let a=Date.now();try{let t=S(i.device),o=t?{status:`clear`}:await D({session:i,command:n,phase:`before-command`,observation:e.androidObservation}),s=await r(i);if(rn(s))return s.refused;t||await D({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}`),A({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 dn(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 fn(e,t){let n=ne(e);return n.intent===`drag`?{...n,source:pn(n.source,t),destination:pn(n.destination,t)}:n}function pn(t,n){if(!t.startsWith(`@`))return t;let i=a(t);if(!i)throw new e(`INVALID_ARGS`,`Invalid ref "${t}" — malformed generation suffix.`,{hint:r});return De({ref:i.base,mintedGeneration:i.generation,frame:C({session:n,ref:i.base,mintedGeneration:i.generation})}),i.base}function mn(e,t){return e.kind!==`drag`||!t?h(e):h({...e,source:t.sourceSelector??e.source,destination:t.destinationSelector??e.destination})}function hn(t){if(!t||typeof t!=`object`||Array.isArray(t))throw new e(`INVALID_ARGS`,`swipe requires structured object input`);re(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:_n(n.from,`swipe from`),to:_n(n.to,`swipe to`),count:o(n,`count`,{min:1,max:200}),pauseMs:o(n,`pauseMs`,{min:0,max:ee}),pattern:r};return gn(i),i}function gn(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 ${p}ms.`,{count:n,pauseMs:r,gestureDurationMs:100,scheduledDurationMs:i,hint:`Reduce --count or --pause-ms.`})}function _n(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 vn(e){return[String(e.from.x),String(e.from.y),String(e.to.x),String(e.to.y)]}async function yn(e,t,n,r,i,a){let o;for(let s=0;s<r;s+=1){let c=m(bn(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 fe(i)}if(!o)throw Error(`Swipe orchestration did not execute a gesture.`);return o}function bn(e,t,n){return t!==`ping-pong`||n%2!=1?e:{...e,from:e.to,to:e.from}}function xn(e,t){return e.kind!==`pan`||e.pointerCount===void 0?t:{...t,pointerCount:e.pointerCount}}async function Sn(e){let t={...e,refSnapshotFlagGuardResponse:ke};switch(e.req.command){case`press`:return await Q(t,`press`);case`click`:return await Q(t,`click`);case`longpress`:return await Q(t,`longpress`);case`hover`:return await Q(t,`hover`);case`fill`:return await Pt(t);case _.gesture:return await an(e);case _.swipe:return await ln(e);case _.type:return await Cn(e);case`get`:return await je(e);case`is`:return await Ae(e);default:return null}}async function Cn(e){let{sessionName:t,sessionStore:n}=e,r=n.get(t);if(!r)return b();let i=await Me({device:r.device,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});if(!i.ok)return i.response;let a=await wn(r,e.androidObservation);return a.response?a.response:await Tn(e,r,i.typeText,a.warning)}async function wn(e,t){if(e.device.platform===`android`&&e.screenRecording){let n=await Se({session:e,observation:t});if(n.status===`failed`)return{response:x(`COMMAND_FAILED`,`Android system dialog blocked the recording session`)};if(n.status===`unknown`)return{warning:n.warning}}return{}}async function Tn(e,n,r,i){let{req:a,sessionStore:o}=e,s=Date.now();try{let t=await D({session:n,command:a.command,phase:`before-command`,observation:e.androidObservation});w(n);let c=await r(a.positionals??[],e.contextFromFlags(a.flags,n.appBundleId,n.trace?.outPath));await D({session:n,command:a.command,phase:`after-command`,observation:e.androidObservation});let l=Date.now(),u={...c};return En(u,i,t),A({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 En(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{Sn as handleInteractionCommands};
|
|
1
|
+
import{C as e,F as t,N as n,c as r,w as i,x as a}from"./sdk-contracts.js";import{f as o}from"./sdk-batch-runner.js";import{u as s,v as c}from"./sdk-device.js";import{C as l,h as u,m as d,p as f}from"./sdk-batch.js";import{c as p,o as ee}from"./scroll-gesture.js";import{C as m,E as te,S as ne,v as re,x as h}from"./script.js";import{N as ie,f as g}from"./parameterized-recorded-fill.js";import{S as ae,u as oe}from"./runtime.js";import{n as _}from"./catalog.js";import{r as se}from"./success-text.js";import{i as v,n as ce,r as le}from"./click-button.js";import{r as ue,t as de}from"./interaction-positionals.js";import{r as y}from"./diagnostics.js";import{t as fe}from"./timeouts.js";import"./diagnostics2.js";import"./retry.js";import"./gesture-plan.js";import{r as pe}from"./request-cancel.js";import"./request.js";import{a as b,i as x,s as S}from"./request-runtime-binding.js";import{D as C,E as w,d as me,n as he,r as T,t as ge,u as _e,w as ve}from"./session-snapshot.js";import{n as E,t as ye}from"./touch-reference-frame.js";import{m as be,p as xe}from"./quality-warnings.js";import{i as Se,r as D}from"./internal/daemon.js";import{a as Ce,c as we,i as O,l as Te,n as k,o as A,r as j,s as Ee,t as De}from"./interaction-ref-policy.js";import{t as M}from"./gesture-runtime.js";import{_ as N,d as Oe,f as ke,i as Ae,r as je}from"./selector-runtime.js";import{n as Me}from"./type-text-runtime.js";function Ne(t){let n=t.flags?.recordAs;if(n!==void 0){if(ie(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 P(e,t){if(!ve(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){y({level:`warn`,phase:`android_ref_snapshot_refresh_failed`,data:{command:e.req.command,error:t instanceof Error?t.message:String(t)}})}return n}function F(e,t){return!s(e.device)||e.surface!==`desktop`&&e.surface!==`menubar`||e.surface===`menubar`&&(t===`click`||t===`press`)?null:x(`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 Pe=new Set(u()),Fe=new Set([`currentUptimeMs`,`gestureEndUptimeMs`,`gestureStartUptimeMs`,`sequenceResults`]);function I(e){if(e)return Object.fromEntries(Object.entries(e).filter(([e])=>!Fe.has(e)))}function Ie(e){return Re({fields:Le(e.command),input:e.input??{},data:I(e.data),controlledFields:Pe})}function Le(e){let t=l(e);if(!t)throw Error(`Missing response data transform descriptor for ${e}`);return t.fields}function Re(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 ze(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&&!S(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=ye(t.snapshot);if(l)return s.setTouchReferenceFrame(l),l;let u=await a(t,n,r,i,{interactiveOnly:!0}),d=ye(u);return d&&s.setTouchReferenceFrame(d),d}async function Be(e){try{return await ze(e)}catch(t){y({level:`warn`,phase:`touch_reference_frame_resolve_failed`,data:{platform:e.session.device.platform,error:t instanceof Error?t.message:String(t)}});return}}function L(e){let{data:t,fallbackX:n,fallbackY:r,referenceFrame:i,extra:a}=e,o=He(a,n,r)??(typeof t?.message==`string`?t.message:void 0);return Ve({...t??{},...n===void 0||r===void 0?{}:{x:n,y:r},...i??{},...a??{},...se(o)})}function Ve(e){return Object.fromEntries(Object.entries(e).filter(([,e])=>e!==void 0))}function He(e,t,n){let r=R(e,`text`);if(r!==void 0)return`Filled ${Array.from(r).length} chars`;let i=Ue(t,n),a=We(e);if(a)return Ke(a,e??{},i);if(i)return Ge(e,i)}function R(e,t){let n=e?.[t];return typeof n==`string`?n:void 0}function Ue(e,t){return e===void 0||t===void 0?``:` (${e}, ${t})`}function We(e){let t=R(e,`ref`);return t===void 0?R(e,`selector`):`@${t}`}function Ge(e,t){return e?.gesture===`longpress`?`Long pressed${t}`:e?.gesture===`hover`?`Hovered${t}`:`Tapped${t}`}function Ke(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 z(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 B(e,t){let n=z(e);if(n)return{ok:!0,target:{kind:`point`,x:n.x,y:n.y}};let r=e[0]??``;if(r.startsWith(`@`)){let t=N(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:x(`INVALID_ARGS`,`${t} requires @ref, selector expression, or x y coordinates`)}}function qe(e){let t=z(e);if(t)return{ok:!0,target:{kind:`point`,x:t.x,y:t.y},...$e(e[2])};let n=Qe(e),r=B(n.targetPositionals,`longpress`);return r.ok?{ok:!0,target:r.target,refGeneration:r.refGeneration,...n.duration}:r}function V(e){return{ok:!1,response:x(`INVALID_ARGS`,`fill requires text after ${e} (use "" to clear the field)`)}}function Je(e){let t=Ye(e);if(!t)return{ok:!1,response:x(`INVALID_ARGS`,`fill requires x y text, @ref text, or selector text`)};switch(t.kind){case`ref`:{let n=N(e[0]??``);return n.ok?t.text===void 0?V(`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?V(`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()?V(`selector`):{ok:!0,target:{kind:`selector`,selector:t.target.selector},text:t.text}}}function Ye(e){try{return de(e)}catch{return null}}function Xe(e){let t=`evidence`in e?e.evidence:void 0,n=e.settle;return e.kind===`ref`?{ref:ue(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 Ze(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 Qe(e){let t=e.at(-1);return e.length>1&&et(t)?{targetPositionals:e.slice(0,-1),duration:{durationMs:Number(t)}}:{targetPositionals:e,duration:{}}}function $e(e){return e===void 0?{}:{durationMs:Number(e)}}function et(e){return e===void 0||e.trim()===``?!1:Number.isFinite(Number(e))}const tt={source:`direct-ios`,kind:`not-observed`};function H(e,t){if(!nt(e))return t;let{resolution:n,...r}=t;return r}function nt(e){return`dispatchPath`in e&&e.dispatchPath===`maestro-non-hittable-fallback`}function U(e){return W({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 W(e){let{source:t,referenceFrame:n,extra:r}=e;if(t.kind===`runner-payload`||t.kind===`corroborated-tap`){let e={targetKind:t.targetKind,...H(t,{resolution:t.kind===`runner-payload`?tt:t.resolution}),...r??{}};return{result:L({data:t.data,fallbackX:t.point?.x,fallbackY:t.point?.y,referenceFrame:n,extra:e}),responseData:L({data:t.publicData,fallbackX:t.point?.x,fallbackY:t.point?.y,referenceFrame:n,extra:e})}}let{result:i}=t,a={targetKind:i.kind,...H(t,Xe(i)),...at(i.settle,e.settleRefsGeneration),...r??{}},o=L({data:i.backendResult,fallbackX:i.point?.x,fallbackY:i.point?.y,referenceFrame:n,extra:{...a,...it(i)}}),s=L({data:t.publicData,fallbackX:i.point?.x,fallbackY:i.point?.y,referenceFrame:n,extra:a}),c=ot(`warning`in i?i.warning:void 0,e.staleRefsWarning);return c&&(o.warning=c,s.warning=c),{result:o,responseData:s,...rt(i)}}function rt(e){let t=G(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 it(e){let t=G(e);return t?{selectorChain:t.selectorChain,refLabel:t.refLabel}:{}}function G(e){return`recordingTarget`in e?e.recordingTarget:void 0}function at(e,t){return!e?.diff||t===void 0?{}:{settle:{...e,refsGeneration:t}}}function ot(e,t){return t?e?`${e} ${t}`:t:e}async function st(e){let{params:t,session:n,result:r,publicData:i,extra:a}=e,o=r.kind===`point`?await Be({session:n,flags:t.req.flags,sessionStore:t.sessionStore,contextFromFlags:t.contextFromFlags,captureSnapshotForSession:t.captureSnapshotForSession,observation:t.androidObservation}):E(n.snapshot?.nodes??[]);return W({source:{kind:`runtime`,result:r,publicData:i},referenceFrame:o,extra:a,staleRefsWarning:e.staleRefsWarning,settleRefsGeneration:ge(n,r.settle)})}function K(e){return e.command?Ie({command:e.command,input:e.flags,data:e.data}):I(e.data)}function ct(e,t){return e===`click`||e===`press`||e===`fill`?e:t}function q(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 J(e){return[String(e.x),String(e.y)]}function lt(n){let{error:r,snapshotGeneration:i,publishPartialRefs:a}=n;if(r.code!==`AMBIGUOUS_MATCH`)return r;let o=t(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 ut(t,n,r){let i=await Oe(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 dt(e){return e.code===`COMMAND_FAILED`&&typeof e.details?.expectedPackage==`string`&&typeof e.details?.foregroundPackage==`string`}async function Y(e){if(!ft(e))return;let t=mt(e.session.snapshot);if(!t)return;let n=await ht(e,t.snapshot.snapshotQuality,t.presentation);if(!(!n||!gt(t.snapshot,n,e.command)))return yt(t.snapshot,n,e.command)}function ft(e){return pt(e.command)&&i(e.error).code===`XCTEST_RECORDED_FAILURE`&&we(e.session,{skipPendingPostGestureStabilization:!1})}function pt(e){return e===`click`||e===`press`}function mt(e){if(!X(e))return;let t=Date.now()-e.createdAt;if(t<0||t>15e3){y({level:`debug`,phase:`ios_tap_failure_corroboration_stale_baseline`,data:{ageMs:t}});return}let n=bt(e.presentationKey);if(n){if(n.raw){y({level:`debug`,phase:`ios_tap_failure_corroboration_raw_baseline`,data:{presentationKey:e.presentationKey}});return}return{snapshot:e,presentation:n}}}async function ht(e,t,n){try{let r=be(t);return await e.captureSnapshotForSession(e.session,Tt(e.flags,n),e.sessionStore,e.contextFromFlags,{interactiveOnly:n?.interactiveOnly??!0,...r?{preferredBackend:r}:{},signal:pe(e.requestId)})}catch(t){y({level:`debug`,phase:`ios_tap_failure_corroboration_capture_failed`,data:{command:e.command,error:t instanceof Error?t.message:String(t)}});return}}function gt(e,t,n){let r=_t(e,t);return r===void 0?vt(e,t,n):r?!0:(y({level:`debug`,phase:`ios_tap_failure_corroboration_identity_mismatch`,data:{command:n}}),!1)}function _t(e,t){if(e.comparisonKey!==void 0||t.comparisonKey!==void 0)return e.comparisonKey!==void 0&&e.comparisonKey===t.comparisonKey}function vt(e,t,n){let r=e.snapshotQuality?.backend,i=t.snapshotQuality?.backend;return!r||r!==i?(y({level:`debug`,phase:`ios_tap_failure_corroboration_backend_mismatch`,data:{command:n,baselineBackend:r,afterBackend:i}}),!1):e.presentationKey===t.presentationKey||(y({level:`debug`,phase:`ios_tap_failure_corroboration_scope_mismatch`,data:{command:n,baselinePresentationKey:e.presentationKey,afterPresentationKey:t.presentationKey}}),!1)}function yt(e,t,n){if(!X(t))return;let r=oe(e.nodes),i=oe(t.nodes);if(r.digest!==i.digest)return y({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 X(e){return!!(e&&e.nodes.length>0&&!xe(e.snapshotQuality))}function bt(e){if(!e)return;let t;try{t=JSON.parse(e)}catch{return}return xt(t)}function xt(e){let t=St(e);if(!(!t||typeof t.interactiveOnly!=`boolean`||typeof t.raw!=`boolean`)&&!(!Ct(t.depth)||!wt(t.scope)))return{interactiveOnly:t.interactiveOnly,...typeof t.depth==`number`?{depth:t.depth}:{},...typeof t.scope==`string`?{scope:t.scope}:{},raw:t.raw}}function St(e){return typeof e==`object`&&e?e:void 0}function Ct(e){return e==null||typeof e==`number`}function wt(e){return e==null||typeof e==`string`}function Tt(e,t){if(!(!e&&!t))return{...e??{},out:void 0,...t?{snapshotDepth:t.depth,snapshotScope:t.scope,snapshotRaw:t.raw}:{}}}function Et(e){return e.kind===`selector`?{selector:e.selector}:e.kind===`ref`?{ref:e.ref.startsWith(`@`)?e.ref.slice(1):e.ref}:{}}async function Dt(e,t,n,r,i){if(e.lease?.leaseProvider)return{aborted:!1,readiness:{status:`clear`},runtimeResult:await r()};let a=await D({session:e,command:t,phase:`before-command`,observation:i});if(n.refContext&&a.status===`recovered`){let t=k({ref:n.refContext.ref,mintedGeneration:n.refContext.mintedGeneration,staleRefsWarning:n.refContext.staleRefsWarning,frame:C({session:e,ref:n.refContext.ref,mintedGeneration:n.refContext.mintedGeneration})});if(t)return{aborted:!0,response:t}}let o=await r();return await D({session:e,command:t,phase:`after-command`,observation:i}),{aborted:!1,readiness:a,runtimeResult:o}}async function Z(e,t){let n=e.sessionStore.get(e.sessionName);if(!n)return b();let r=Ce({...e,touchExecutor:t.touchExecutor}),a=Date.now();try{let i,o=await Dt(n,e.req.command,{refContext:t.refContext},async()=>{let e=await t.run(r);return i=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]:[],...i?[i]:[]];if(p.length>0){let e=[...typeof d.warning==`string`?[d.warning]:[],...p].join(` `);u.warning=e,d.warning=e}return A({session:n,sessionStore:e.sessionStore,command:e.req.command,positionals:e.req.positionals??[],retryPositionals:Mt(e.req.command,c),flags:e.req.flags,result:u,responseData:d,recordedTarget:f,actionStartedAt:a,actionFinishedAt:l,androidFreshnessBaseline:t.androidFreshnessBaseline})}catch(r){let o=lt({error:i(r),snapshotGeneration:n.snapshotGeneration,publishPartialRefs:e=>he(n,e)});if(dt(o))throw o;return o.code===`AMBIGUOUS_MATCH`?jt(o):await Ot({error:o,handlerParams:e,session:n,target:t.iosTapCorroboration?.target,extra:t.iosTapCorroboration?.extra,actionStartedAt:a,androidFreshnessBaseline:t.androidFreshnessBaseline})||jt(o)}}async function Ot(e){if(!e.target)return;let t=ae(e.error);if(!t&&g(e.session))return;let n=await Y({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=kt({target:e.target,resolvedTarget:t,warning:n.warning,referenceFrame:E(e.session.snapshot?.nodes??[]),extra:e.extra});return A({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 kt(e){return e.resolvedTarget?W({source:{kind:`runtime`,result:{...e.resolvedTarget,warning:e.warning}},referenceFrame:e.referenceFrame,extra:e.extra}):U({targetKind:e.target.kind,point:At(e.target),warning:e.warning,referenceFrame:e.referenceFrame,extra:{...Et(e.target),...e.extra??{}}})}function At(e){return e.kind===`point`?{x:e.x,y:e.y}:void 0}function jt(e){return{ok:!1,error:n(e)}}function Mt(e,t){if(!(t.kind===`ref`&&!t.node)&&(e===`click`||e===`press`))return t.point?J(t.point):void 0}async function Nt(e,t,n,r){let i=await me({device:t.device,command:n,requiresCapture:r,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});return i.ok?{ok:!0,touchExecutor:_e(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=F(i,`fill`);if(e)return e}if(!i)return b();let a=Je(t.positionals??[]);if(!a.ok)return a.response;let o=await Nt(e,i,`fill`,a.target.kind!==`point`);if(!o.ok)return o.response;let{touchExecutor:s}=o;Ne({flags:t.flags,replayPlanStep:t.internal?.replayPlanStep===!0,isSessionRecording:g(i)});let c=O(`fill`,t.flags);if(c)return c;let l=await Ft(e,i,a.target,a.refGeneration);if(l.response)return l.response;let{staleRefsWarning:u}=l,d=t.internal?.replayTargetGuard;return await Z(e,{touchExecutor:s,refContext:a.target.kind===`ref`&&t.internal?.findResolvedTarget===void 0?{ref:a.target.ref,mintedGeneration:a.refGeneration,staleRefsWarning:u}: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:j(t.flags),expectedResolvedTarget:d,preresolvedTarget:t.internal?.findResolvedTarget}),buildPayloads:e=>It({session:i,result:e,text:a.text,flags:t.flags,staleRefsWarning:u})})}async function Ft(e,t,n,r){if(n.kind!==`ref`)return{};let i=e.req.internal?.findResolvedTarget===void 0?T({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:k({ref:n.ref,mintedGeneration:r,staleRefsWarning:i,frame:C({session:t,ref:n.ref,mintedGeneration:r})});return o?{response:o,staleRefsWarning:i}:(await P(e,t),{staleRefsWarning:i})}function It(e){let{session:t,result:n}=e,r=q(e.flags?.maestro?.allowNonHittableCoordinateFallback===!0,n.backendResult),i=n.kind===`point`?void 0:E(t.snapshot?.nodes??[]);return W({source:{kind:`runtime`,result:n,publicData:K({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:ge(t,n.settle)})}async function Lt(e,t,r,i){let a=e,o={selector:r.raw},s=Date.now();w(t);try{let e=await i(r)??{},n=Date.now(),c=zt(e),l=K({command:ct(a.req.command,`press`),flags:a.req.flags,data:e}),u=q(r.allowNonHittableCoordinateFallback===!0,e),{result:d,responseData:f}=W({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 A({session:t,sessionStore:a.sessionStore,command:a.req.command,positionals:a.req.positionals??[],retryPositionals:J(c),flags:a.req.flags,result:d,responseData:f,actionStartedAt:s,actionFinishedAt:n})}catch(e){return await Rt({error:e,handlerParams:a,session:t,extra:o,positionals:[],actionStartedAt:s})||(Ee(e,{delegateSemanticFailures:r.allowNonHittableCoordinateFallback!==!0})?(y({level:`debug`,phase:`ios_direct_selector_tap_fallback`,data:{selector:r.raw,error:e instanceof Error?e.message:String(e)}}),null):{ok:!1,error:n(e)})}}async function Rt(e){let{error:t,handlerParams:n,session:r,extra:i,positionals:a,actionStartedAt:o}=e,s=await Y({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}=U({targetKind:`selector`,warning:s.warning,resolution:{source:`direct-ios`,kind:`not-observed`},extra:i});return A({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`||g(t)||Wt(i)||d(n)&&i?.verify===!0||f(n)&&i?.settle===!0?null:Ht(t,r.selector,i)}function Ht(e,t,n){let r=Te({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:b()};let o=t===`click`?`click`:t,s=qt(a,t,o,n.flags);if(s)return{response:s};let c=n.positionals??[],l=t===`longpress`?qe(c):B(c,o);if(!l.ok)return{response:l.response};let u=Yt(a,n,l),d=Zt(e,a,t,l,u);if(d.response)return{response:d.response};let f=v(n.flags);return{admitted:{session:a,commandLabel:o,clickButton:f,resultButtonTag:ce(f),target:l.target,durationMs:t===`longpress`?l.durationMs:void 0,staleRefsWarning:u,refContext:Xt(n,l,u)}}}function qt(e,t,n,r){return F(e,n)||O(t,r)||Jt(e,t,n,r)}function Jt(e,t,n,r){let i=v(r);if(!Gt.has(t)||i===`primary`)return;let a=le({commandLabel:n,platform:c(e.device),button:i,count:r?.count,intervalMs:r?.intervalMs,holdMs:r?.holdMs,jitterPx:r?.jitterPx,doubleTap:r?.doubleTap});if(a)return x(a.code,a.message,a.details)}function Yt(e,t,n){if(n.target.kind===`ref`&&t.internal?.findResolvedTarget===void 0)return T({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:k({ref:r.target.ref,mintedGeneration:r.refGeneration,staleRefsWarning:i,frame:C({session:t,ref:r.target.ref,mintedGeneration:r.refGeneration})});return s?{response:s}:{}}async function Q(e,t){let n=await Kt(e,t);if(`response`in n)return n.response;let{admitted:r}=n,i=await Nt(e,r.session,t,r.target.kind!==`point`);if(!i.ok)return i.response;let{touchExecutor:a}=i,o=r.target.kind===`ref`?await P(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 Z(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 ut(a,Ze(o,t),e.androidObservation)},buildPayloads:async n=>{let i=tn(n);return await st({params:e,session:a,result:n,staleRefsWarning:c,publicData:K({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:j(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 un(e,`gesture`,async t=>on(e,t))}async function on(e,t){let n=te(e.req.input),r=fn(n,t);r.intent===`pan`&&e.req.internal?.gestureExecutionProfile&&(r.executionProfile=e.req.internal.gestureExecutionProfile);let i=await M({device:t.device,input:r,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});return i.ok?cn(n,r,await sn($(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:mn(e,i),flags:xn(e,r),responseData:nn(n,{executionProfile:dn(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 un(e,`swipe`,async t=>{let n=hn(e.req.input),r=await M({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 yn($(e,r.gestures),e,n,i,a,o);return{positionals:vn(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 $(e,t){return Ce({...e,gestures:t,pairedGestureViewport:e.req.internal?.gestureViewport})}async function un(e,t,r){let i=e.sessionStore.get(e.sessionName);if(!i)return b();let a=Date.now();try{let n=S(i.device),o=n?{status:`clear`}:await D({session:i,command:t,phase:`before-command`,observation:e.androidObservation}),s=await r(i);if(rn(s))return s.refused;n||await D({session:i,command:t,phase:`after-command`,observation:e.androidObservation});let c={...s.responseData};return o.status===`recovered`&&(c.warning=`${typeof c.warning==`string`?`${c.warning} `:``}${o.warning}`),A({session:i,sessionStore:e.sessionStore,command:t,actionCommand:t,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:n(e)}}}function dn(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 fn(e,t){let n=ne(e);return n.intent===`drag`?{...n,source:pn(n.source,t),destination:pn(n.destination,t)}:n}function pn(t,n){if(!t.startsWith(`@`))return t;let i=a(t);if(!i)throw new e(`INVALID_ARGS`,`Invalid ref "${t}" — malformed generation suffix.`,{hint:r});return De({ref:i.base,mintedGeneration:i.generation,frame:C({session:n,ref:i.base,mintedGeneration:i.generation})}),i.base}function mn(e,t){return e.kind!==`drag`||!t?h(e):h({...e,source:t.sourceSelector??e.source,destination:t.destinationSelector??e.destination})}function hn(t){if(!t||typeof t!=`object`||Array.isArray(t))throw new e(`INVALID_ARGS`,`swipe requires structured object input`);re(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:_n(n.from,`swipe from`),to:_n(n.to,`swipe to`),count:o(n,`count`,{min:1,max:200}),pauseMs:o(n,`pauseMs`,{min:0,max:ee}),pattern:r};return gn(i),i}function gn(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 ${p}ms.`,{count:n,pauseMs:r,gestureDurationMs:100,scheduledDurationMs:i,hint:`Reduce --count or --pause-ms.`})}function _n(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 vn(e){return[String(e.from.x),String(e.from.y),String(e.to.x),String(e.to.y)]}async function yn(e,t,n,r,i,a){let o;for(let s=0;s<r;s+=1){let c=m(bn(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 fe(i)}if(!o)throw Error(`Swipe orchestration did not execute a gesture.`);return o}function bn(e,t,n){return t!==`ping-pong`||n%2!=1?e:{...e,from:e.to,to:e.from}}function xn(e,t){return e.kind!==`pan`||e.pointerCount===void 0?t:{...t,pointerCount:e.pointerCount}}async function Sn(e){let t={...e,refSnapshotFlagGuardResponse:ke};switch(e.req.command){case`press`:return await Q(t,`press`);case`click`:return await Q(t,`click`);case`longpress`:return await Q(t,`longpress`);case`hover`:return await Q(t,`hover`);case`fill`:return await Pt(t);case _.gesture:return await an(e);case _.swipe:return await ln(e);case _.type:return await Cn(e);case`get`:return await je(e);case`is`:return await Ae(e);default:return null}}async function Cn(e){let{sessionName:t,sessionStore:n}=e,r=n.get(t);if(!r)return b();let i=await Me({device:r.device,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});if(!i.ok)return i.response;let a=await wn(r,e.androidObservation);return a.response?a.response:await Tn(e,r,i.typeText,a.warning)}async function wn(e,t){if(e.device.platform===`android`&&e.screenRecording){let n=await Se({session:e,observation:t});if(n.status===`failed`)return{response:x(`COMMAND_FAILED`,`Android system dialog blocked the recording session`)};if(n.status===`unknown`)return{warning:n.warning}}return{}}async function Tn(e,t,r,i){let{req:a,sessionStore:o}=e,s=Date.now();try{let n=await D({session:t,command:a.command,phase:`before-command`,observation:e.androidObservation});w(t);let c=await r(a.positionals??[],e.contextFromFlags(a.flags,t.appBundleId,t.trace?.outPath));await D({session:t,command:a.command,phase:`after-command`,observation:e.androidObservation});let l=Date.now(),u={...c};return En(u,i,n),A({session:t,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:n(e)}}}function En(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{Sn as handleInteractionCommands};
|
package/dist/src/interactor.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{C as e}from"./sdk-contracts.js";import{h as t,l as n,u as r}from"./sdk-device.js";import{r as i}from"./snapshot-scope.js";import{d as a,i as o,l as s}from"./scroll-gesture.js";import{a as c,n as l}from"./alert-contract.js";import{
|
|
1
|
+
import{C as e}from"./sdk-contracts.js";import{h as t,l as n,u as r}from"./sdk-device.js";import{r as i}from"./snapshot-scope.js";import{d as a,i as o,l as s}from"./scroll-gesture.js";import{a as c,n as l}from"./alert-contract.js";import{f as u,n as d,p as ee,u as f}from"./location-coordinates.js";import{n as te,s as ne,t as re}from"./scroll-command.js";import"./device.js";import{t as ie}from"./device-rotation.js";import{c as ae,r as p}from"./diagnostics.js";import{_ as oe}from"./owner-identity.js";import{a as m}from"./exec.js";import{t as h}from"./timeouts.js";import{a as se}from"./tv-remote.js";import"./diagnostics2.js";import"./command.js";import{i as ce,n as g}from"./retry.js";import"./process.js";import{a as le}from"./gesture-plan.js";import{n as ue}from"./scoped-provider.js";import{n as de,r as fe}from"./ios-snapshot-planning.js";import{r as pe}from"./device-isolation.js";import{h as me,i as he,n as ge,p as _e}from"./quality-warnings.js";import{n as ve,r as ye}from"./ios-system-surface.js";import{r as be}from"./ios-snapshot-acquisition.js";import{i as xe,n as Se}from"./screenshot-density.js";import{n as Ce}from"./interactor-types.js";import{a as _,o as v,t as we}from"./runner-presentation.js";import{C as Te,g as Ee,r as y}from"./host-file.js";import{a as b,c as De,d as Oe,l as ke,u as Ae}from"./config.js";import{o as je}from"./tool-provider.js";import{n as x,r as S,t as C}from"./physical-device-control.js";import{n as w}from"./simctl.js";import{n as T,r as Me}from"./apps-simctl.js";import{n as E,r as D,s as Ne}from"./runner.js";import{t as Pe}from"./runner-cache-metadata.js";import"./runner-disposal.js";import{h as O,m as Fe}from"./runner-client.js";import{n as Ie,r as Le,t as k}from"./app-launch.js";import{r as A,t as j}from"./simulator.js";import{a as Re,d as ze,f as Be,g as Ve,h as M,m as He,p as Ue}from"./app-resolution.js";import{a as We,i as Ge,o as Ke}from"./helper.js";import{n as qe}from"./multitouch-support.js";import{t as Je}from"./surface-snapshot.js";import N from"node:path";async function Ye(e){return r(e)?await ze():(A(e,`clipboard`),await j(e),m(await T(e,[`pbpaste`,e.id],{allowFailure:!0}),`Failed to read iOS simulator clipboard`).stdout.replaceAll(`\r
|
|
2
2
|
`,`
|
|
3
3
|
`).replace(/\n$/,``))}async function Xe(e,t){if(r(e)){await Ue(t);return}A(e,`clipboard`),await j(e),m(await T(e,[`pbcopy`,e.id],{allowFailure:!0,stdin:t}),`Failed to write iOS simulator clipboard`)}const Ze=[`--time`,`9:41`,`--dataNetwork`,`wifi`,`--wifiMode`,`active`,`--wifiBars`,`3`,`--batteryState`,`charged`,`--batteryLevel`,`100`],Qe={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`},$e={1:`searching`,2:`failed`,3:`active`},et={0:`notSupported`,1:`searching`,2:`failed`,3:`active`};function P(e,t,n){return w(e,t,n)}const F=new Set;async function tt(e){let t=null,n=!1;if(rt(e))n=!0;else try{t=await it(e),n=!0}catch(t){ut(e,`snapshot_failed`,t)}try{(!n||t)&&await at(e),await ot(e,Ze)}catch(t){ut(e,`prepare_failed`,t)}return async()=>{await nt(e,n?t:null)}}async function nt(e,t){if(await at(e),!t){L(e);return}await ot(e,ct(t)),I(e)}function I(e){F.delete(R(e))}function L(e){F.add(R(e))}function rt(e){return F.has(R(e))}function R(e){return`${e.platform}:${e.kind}:${e.id}`}async function it(e){return st(m(await P(e,[`status_bar`,e.id,`list`],{allowFailure:!0}),`Failed to read simulator status bar overrides`).stdout)}async function at(e){await P(e,[`status_bar`,e.id,`clear`])}async function ot(e,t){t.length!==0&&await P(e,[`status_bar`,e.id,`override`,...t])}function st(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=Qe[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=$e[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=et[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 ct(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||lt(e.dataNetwork)||e.operatorName!==void 0)&&t.push(`--cellularBars`,e.cellularBars),e.operatorName!==void 0&&t.push(`--operatorName`,e.operatorName),t}function lt(e){return!!(e&&e!==`hide`&&e!==`wifi`)}function ut(e,t,n){p({level:`warn`,phase:`ios_screenshot_status_bar_${t}`,data:{platform:e.platform,deviceKind:e.kind,deviceId:e.id,...S(n)}})}let z=null,dt;async function ft(t,n,i,a,o){if(r(t)){let t=n.toLowerCase();if(t===`appearance`){await Be(i);return}if(t===`permission`){let t=
|
|
5
|
-
`)){let e=r.trim();if(!e)continue;if(e===`service`){n=!0;continue}if(!n)continue;if(e.startsWith(`bundle identifier`))break;let i=/^([a-z-]+)\s+-\s+/.exec(e)?.[1];i!==void 0&&t.add(i)}return t}function Ct(t,n){let r=d(t);if(r!==`photos`&&n?.trim())throw new e(`INVALID_ARGS`,`Permission mode is only supported for photos. Received: ${n}.`);if(r===`camera`)return`camera`;if(r===`microphone`)return`microphone`;if(r===`contacts`)return`contacts`;if(r===`contacts-limited`)return`contacts-limited`;if(r===`notifications`)return`notifications`;if(r===`calendar`)return`calendar`;if(r===`location`)return`location`;if(r===`location-always`)return`location-always`;if(r===`media-library`)return`media-library`;if(r===`motion`)return`motion`;if(r===`reminders`)return`reminders`;if(r===`siri`)return`siri`;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.`)}throw new e(`INVALID_ARGS`,`Unsupported permission target: ${t}. Use camera|microphone|photos|contacts|contacts-limited|notifications|calendar|location|location-always|media-library|motion|reminders|siri.`)}function wt(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 Tt(t,n,r){let i=Et(t.id,n,r.modalityAliases),a=[];for(let e of i){let n=Me(t,e),r=await je(n,{allowFailure:!0});if(r.exitCode===0)return;a.push({args:n,stderr:r.stderr,stdout:r.stdout,exitCode:r.exitCode})}let o=Ve(a);throw a.length>0&&a.every(e=>Dt(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 Et(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 Dt(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 B(e,t,n){return w(e,t,n)}const Ot={ensureBooted:j,prepareStatusBarForScreenshot:tt,captureWithRetry:Mt,normalizeDensity:Vt,captureWithRunner:H,shouldFallbackToRunner:zt},kt=new Map,V=new Map;async function At(e,t,n={}){if(r(e)){await H(e,t,n.appBundleId,n.fullscreen,n.runnerOptions);return}if(e.kind===`simulator`){await jt(e,t,n);return}await C(e).captureScreenshot(e,t,{appBundleId:n.appBundleId,fullscreen:n.fullscreen,runnerOptions:n.runnerOptions,runRunnerCommand:O})}async function jt(t,n,r={}){if(t.kind!==`simulator`)throw new e(`UNSUPPORTED_OPERATION`,`Simulator screenshot fallback flow supports only iOS simulators`);let i={...Ot,...r.deps??{}};r.skipIosSimulatorBootCheck||await i.ensureBooted(t);let a=async()=>{};if(r.normalizeStatusBar===!0)try{a=await i.prepareStatusBarForScreenshot(t)}catch(e){Lt(t,`prepare_failed`,e)}try{try{await i.captureWithRetry(t,n),await i.normalizeDensity(t,n,r.pixelDensity);return}catch(e){let a=e;if(r.skipIosSimulatorBootCheck&&Bt(e)){await i.ensureBooted(t);try{await i.captureWithRetry(t,n),await i.normalizeDensity(t,n,r.pixelDensity);return}catch(e){a=e}}if(!i.shouldFallbackToRunner(a))throw a;It(t,`simctl_screenshot`,a)}await i.captureWithRunner(t,n,r.appBundleId,r.fullscreen,r.runnerOptions),await i.normalizeDensity(t,n,r.pixelDensity)}finally{await a().catch(e=>Lt(t,`restore_failed`,e))}}async function Mt(e,t){let n=g.fromTimeoutMs(Oe);await ce(async({deadline:n})=>{await B(e,[`io`,e.id,`screenshot`,t],{timeoutMs:Math.max(1e3,n?.remainingMs()??2e4)})},{maxAttempts:5,baseDelayMs:De,maxDelayMs:ke,jitter:.2,shouldRetry:e=>zt(e)},{deadline:n,phase:`ios_simulator_screenshot`})}async function H(t,n,i,a,o){if(t.kind===`device`&&!r(t)){await C(t).captureScreenshot(t,n,{appBundleId:i,fullscreen:a,runnerOptions:o,preferRunner:!0,runRunnerCommand:O});return}let s=(await O(t,{command:`screenshot`,appBundleId:i,fullscreen:a,inlineScreenshot:!1},o)).message;if(!s)throw new e(`COMMAND_FAILED`,`Failed to capture iOS screenshot: runner returned no file path`);if(r(t)){await y(s,n);return}if(t.kind===`simulator`){await Nt(t,s,n);return}throw new e(`COMMAND_FAILED`,`Unsupported Apple screenshot target`)}async function Nt(t,n,r){let i=g.fromTimeoutMs(b),a=`Unable to locate runner container for simulator screenshot`,o=V.get(t.id);if(o){let e=await Pt(o,n,r);if(e.copied)return;a=e.error,V.delete(t.id)}for(let e of Pe){let o=await B(t,[`get_app_container`,t.id,e,`data`],{allowFailure:!0,timeoutMs:Ft(i,b,`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 Pt(s,n,r);if(c.copied){V.set(t.id,s);return}a=c.error}throw new e(`COMMAND_FAILED`,`Failed to capture iOS screenshot: ${a}`)}async function Pt(e,t,n){let r=`Runner screenshot was not found in the simulator container`;for(let i of Rt(e,t))try{return await y(i,n),{copied:!0}}catch(e){r=e instanceof Error?e.message:String(e)}return{copied:!1,error:r}}function Ft(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 It(e,t,n){let r=S(n);p({level:`warn`,phase:`ios_screenshot_fallback`,data:{platform:e.platform,deviceKind:e.kind,deviceId:e.id,from:t,to:`runner`,...r}})}function Lt(e,t,n){p({level:`warn`,phase:`ios_screenshot_status_bar_${t}`,data:{platform:e.platform,deviceKind:e.kind,deviceId:e.id,...S(n)}})}function Rt(e,t){let n=N.resolve(e),r=t.trim();if(!r)return[];let i=[],a=new Set,o=e=>{let t=N.normalize(e);a.has(t)||(a.add(t),i.push(t))},s=r.replace(/^\/+/,``),c=s.replaceAll(`\\`,`/`);if(s&&o(N.join(n,s)),N.isAbsolute(r)&&o(N.normalize(r)),c.startsWith(`tmp/`))o(N.join(n,c));else{let e=c.lastIndexOf(`/tmp/`);if(e>=0){let t=c.slice(e+1);o(N.join(n,t))}}let l=N.basename(r);return l&&o(N.join(n,`tmp`,l)),i}function zt(t){if(!(t instanceof e)||t.code!==`COMMAND_FAILED`)return!1;let n=x(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 Bt(t){if(!(t instanceof e)||t.code!==`COMMAND_FAILED`)return!1;let n=x(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 Vt(e,t,n){let r=await Ht(e),i=Se(await xe(t),r,n);i&&await he(t,i.width,i.height)}async function Ht(t){let n=kt.get(t.id);if(n!==void 0)return n;let r=await B(t,[`getenv`,t.id,`SIMULATOR_MAINSCREEN_SCALE`],{timeoutMs:Ae}),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 kt.set(t.id,i),i}function Ut(t){return!(t instanceof e)||t.details?.runnerErrorCode!==`SCROLL_KEYBOARD_OCCLUDES_SURFACE`?t:new e(t.code,t.message,{...t.details,...o})}function Wt(e){let t=e?.amount!==void 0||e?.pixels!==void 0;return{...e,...t?{}:{amount:re},durationMs:e?.durationMs??400,releaseBehavior:e?.releaseBehavior??`controlled`}}function Gt(e,t,n,r={includeDuration:!0}){let i=U(e.referenceWidth),o=U(e.referenceHeight);if(i===void 0||o===void 0)return W(e,{amount:n?.amount});let s=a({direction:t,amount:n?.amount,pixels:n?.pixels,referenceWidth:i,referenceHeight:o});return W(e,{amount:n?.amount,pixels:s.pixels,durationMs:r?.includeDuration?n?.durationMs:void 0,preferProvidedPixels:!0})}function Kt(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 U(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}function W(e,t){let{x1:n,y1:r,x2:i,y2:a}=Jt(e),o=U(e.referenceWidth),s=U(e.referenceHeight),c=qt(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=U(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 qt(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 Jt(e){let t=U(e.x),n=U(e.y),r=U(e.x2),i=U(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 Yt(e,t,n,r,i,a){return Gt(await e(t,{command:`desktopScroll`,direction:i,...Kt(a,{includeDuration:!0,includeReleaseBehavior:!1}),appBundleId:n.appBundleId},r),i,a,{includeDuration:!0})}function G(e,t,n){return{command:`remotePress`,remoteButton:e,...n===void 0?{}:{durationMs:n},...t===void 0?{}:{appBundleId:t}}}function Xt(e){return e===`system`?`backSystem`:`backInApp`}function Zt(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 O(e,q(e,t,r,i),n),pressPoint:async(r,i)=>await Qt(e,t,n,r,i),tapElementSelector:async r=>await O(e,{command:`tap`,selectorKey:r.key,selectorValue:r.value,allowNonHittableCoordinateFallback:r.allowNonHittableCoordinateFallback,...r.expectedPoint?{x:r.expectedPoint.x,y:r.expectedPoint.y}:{},...cn(e)?{synthesized:!0}:{},appBundleId:t.appBundleId},n),doubleTap:async(r,i)=>{let a=await O(e,E([{kind:`doubleTap`,x:r,y:i}],t.appBundleId),n);return D(a),a},longPress:async(r,i,a)=>await O(e,{command:`longPress`,x:r,y:i,durationMs:a,appBundleId:t.appBundleId},n),focus:async(r,i)=>await O(e,q(e,t,r,i),n),type:async(r,i)=>nn(await O(e,{command:`type`,text:r,delayMs:i,textEntryMode:r===`
|
|
6
|
-
`?void 0:`append`,appBundleId:t.appBundleId},n)),fill:async(r,i,a,o,s)=>await O(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 ln(O,e,t,n,r,i),performGesture:async r=>await on(e,t,n,r),gestureViewport:async()=>an(await O(e,{command:`gestureViewport`,appBundleId:t.appBundleId},n))}}}async function Qt(e,t,n,i,a){return r(e)&&a.surface&&a.surface!==`app`?await $t(t,i,a):a.button===`primary`?a.count===1?await tn(e,t,n,i,a):await Fe(e,i,a,t.appBundleId,async t=>await O(e,t,n)):await en(e,t,n,i,a.button)}async function $t(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);return await i(n.x,n.y,{bundleId:t.appBundleId,surface:r.surface}),{}}async function en(e,t,n,r,i){return await O(e,{command:`mouseClick`,x:r.x,y:r.y,button:i,appBundleId:t.appBundleId},n)}async function tn(e,t,n,r,i){if(i.doubleTap){let i=await O(e,E([{kind:`doubleTap`,x:r.x,y:r.y}],t.appBundleId),n);return D(i),i}return i.holdMs>0?await O(e,{command:`longPress`,x:r.x,y:r.y,durationMs:i.holdMs,appBundleId:t.appBundleId},n):await O(e,q(e,t,r.x,r.y),n)}function nn(e){let t=e.textEntryRoute;return rn(t)?{textEntryRoute:t}:{}}function rn(e){return typeof e==`string`&&Ce.includes(e)}function an(t){let n=K(t.x),r=K(t.y),i=K(t.x2),a=K(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 K(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}async function on(e,n,i,a){if(a.topology===`two`&&qe(e,a.intent),a.topology===`single`&&r(e)){let{start:t,end:r}=le(a);return await O(e,{command:`drag`,x:t.x,y:t.y,x2:r.x,y2:r.y,durationMs:a.durationMs,appBundleId:n.appBundleId},i)}if(a.topology===`single`&&t(e)){let{start:t,end:r}=le(a);return await O(e,{command:`swipe`,direction:sn(t,r),appBundleId:n.appBundleId},i)}return await O(e,{command:`gesture`,gesturePlan:a,appBundleId:n.appBundleId},i)}function sn(e,t){let n=t.x-e.x,r=t.y-e.y;return Math.abs(n)>=Math.abs(r)?n>=0?`right`:`left`:r>=0?`down`:`up`}function q(e,t,n,r){return{command:`tap`,x:n,y:r,...cn(e)?{synthesized:!0}:{},appBundleId:t.appBundleId}}function cn(e){return n(e)&&!t(e)}async function ln(e,n,i,a,o,c){if(ne(c?.durationMs,{invalidMessage:`scroll durationMs must be a non-negative integer at most ${te}`}),t(n))return W(await e(n,G(o,i.appBundleId,c?.durationMs),a),{amount:c?.amount,durationMs:c?.durationMs});if(s(c??{}),r(n))return await Yt(e,n,i,a,o,c);let l=Wt(c),u;try{u=await e(n,{command:`scroll`,direction:o,...Kt(l),appBundleId:i.appBundleId},a)}catch(e){throw Ut(e)}return Gt(u,o,l)}function J(e,t,n){if(r(e)){let e=n?.surface===`frontmost-app`?{surface:n.surface}:{bundleId:n?.appBundleId,surface:n?.surface};return async t=>await Ge(t,e)}return async(r,i)=>await O(e,{command:`alert`,action:r,appBundleId:n?.appBundleId,timeoutMs:i},t)}async function un(e,t,n){return await J(e,t,n)(`get`,c)}async function dn(t,n,r){let i=J(t,n,r),a=r?.timeoutMs??1e4,o=Date.now(),s=!0;for(;Date.now()-o<a;){try{let e=s?a:pn(o,a);return s=!1,await i(`get`,e)}catch(e){if(!Y(e))throw e}await h(300)}throw new e(`COMMAND_FAILED`,`alert wait timed out`)}async function fn(e,t,r,i){let a=J(e,t,i),o=n(e)?c:l,s=Date.now(),u,d=!0;for(;Date.now()-s<l;){try{let e=d?o:pn(s,l);return d=!1,await a(r,e)}catch(e){if(u=e,!Y(e))break}await h(300)}throw mn(u)}function pn(e,t){return Math.max(1,t-(Date.now()-e))}function mn(t){return!(t instanceof e)||!Y(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 Y(t){if(!(t instanceof e))return!1;let n=t.details??{};return n.runnerErrorCode===`ALERT_NOT_FOUND`||n.reason===`alert-not-found`}function hn(e){let t=gn(e.systemSurface);return{nodes:Array.isArray(e.nodes)?e.nodes:void 0,truncated:typeof e.truncated==`boolean`?e.truncated:void 0,quality:me(e.snapshotQuality),qualityPayload:bn(e.qualityPayload),runnerFatal:e.runnerFatal===!0,...t?{systemSurface:t}:{},message:typeof e.message==`string`&&e.message.trim().length>0?e.message:void 0}}function gn(e){if(!X(e))return;let t=e.bundleId,n=e.kind;if(!(typeof t!=`string`||!ve(t))&&typeof n==`string`)return{bundleId:t,kind:n}}function _n(e,t,n){let r=n.nodes??[];if(n.runnerFatal===!0||r.length===0&&n.qualityPayload===void 0)return r;let i=fe({raw:t?.raw,interactiveOnly:t?.interactiveOnly,depth:t?.depth,scope:t?.scope,customActions:t?.customActions}),a=xn(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:de(i),viewport:a,hittability:{kind:`available`},lineage:{targetId:e},residue:[]}};try{return we(o,i).nodes}catch(e){vn(e,n)}}function vn(t,n){let r=n.quality;if(t instanceof _&&_e(r))throw new e(`COMMAND_FAILED`,t.message,{...v(t),snapshotQuality:{state:r.state,backend:r.backend,...r.reason?{reason:r.reason}:{},...r.reasonCode?{reasonCode:r.reasonCode}:{}},hint:yn(n.systemSurface,r)},t);Z(t)}function yn(e,t){return[e?`${e.bundleId} hosts the surface presented over the app, and this capture targeted that surface.`:void 0,...ge(t,[])].filter(e=>e!==void 0).join(` `)}function bn(e){if(e!==void 0)return(!X(e)||!Array.isArray(e.nodes)||typeof e.truncated!=`boolean`)&&Z(new _(`invalid-quality-payload`,`iOS runner returned an invalid quality payload`)),e.scope!==void 0&&e.scope!==null&&Z(new _(`invalid-quality-payload`,`iOS runner quality payload must be unscoped`,{field:`scope`})),{nodes:e.nodes,truncated:e.truncated,scope:null}}function xn(e,t){return be(Sn(t),{fallbackToLargestRoot:!0})??be(Sn(e),{fallbackToLargestRoot:!0})??{kind:`missing`,reason:`not-provided`}}function Sn(e){return e?.filter(e=>e.parentIndex===void 0)??[]}function X(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Z(t){throw t instanceof _?new e(`COMMAND_FAILED`,t.message,v(t),t):t}function Cn(n,r,i){if(n.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:a,runnerOpts:o}=Zt(n,r),s={open:(e,t)=>Ie(n,e,{appBundleId:t?.appBundleId,launchConsole:t?.launchConsole,launchArgs:t?.launchArgs,terminateRunningApp:t?.terminateRunningApp,url:t?.url,runnerOptions:o}),openDevice:()=>Le(n),close:e=>k(n,e,o),screenshot:(e,t)=>Nn(n,e,t,o),snapshot:async e=>await wn(n,e,o),readTextAtPoint:async(e,t)=>Fn(n,t?.surface)?await In(e,t):await Ln(n,e,t,o),findText:async(e,t)=>({found:(await O(n,{command:`findText`,text:e,appBundleId:t?.appBundleId},t?.signal?{...o,signal:t.signal}:o))?.found===!0}),back:async e=>{if(t(n)){await O(n,G(`menu`,r.appBundleId),o);return}await O(n,{command:Xt(e),appBundleId:r.appBundleId},o)},home:async()=>{if(t(n)){await O(n,G(`home`,r.appBundleId),o);return}await O(n,{command:`home`,appBundleId:r.appBundleId},o)},setOrientation:async t=>{let i=jn(await O(n,{command:`rotate`,orientation:t,appBundleId:r.appBundleId},o));if(i!==t)throw new e(`COMMAND_FAILED`,`iOS runner observed ${i} after requesting ${t}`,{requestedOrientation:t,observedOrientation:i});return{orientation:i}},appSwitcher:async()=>{await O(n,{command:`appSwitcher`,appBundleId:r.appBundleId},o)},tvRemote:async(e,t)=>{await O(n,G(se(e),r.appBundleId,t),o)},keyboardDismiss:async()=>{let e=await O(n,{command:`keyboardDismiss`,appBundleId:r.appBundleId},o);return{kind:`mechanism`,wasVisible:Q(e,`wasVisible`),dismissed:Q(e,`dismissed`),visible:Q(e,`visible`),mechanism:An(e,`keyboardDismissMechanism`)}},keyboardEnter:async()=>{let e=await O(n,{command:`keyboardReturn`,appBundleId:r.appBundleId},o);return{kind:`visibility-echo`,visible:Q(e,`visible`),wasVisible:Q(e,`wasVisible`)}},readClipboard:()=>Ye(n),writeClipboard:e=>Xe(n,e),setSetting:(e,t,r,i)=>ft(n,e,t,r,i),readAlert:e=>un(n,o,e),awaitAlert:e=>dn(n,o,e),acceptAlert:e=>fn(n,o,`accept`,e),dismissAlert:e=>fn(n,o,`dismiss`,e),...a};return i?Mn(n,r,s,i):s}async function wn(e,t,n){return r(e)&&t?.surface&&t.surface!==`app`?await Je(t,t.signal):await Tn(e,t,n)}async function Tn(t,n,r){let i=hn(await ae(`snapshot_capture`,async()=>await O(t,{command:`snapshot`,appBundleId:n?.appBundleId,interactiveOnly:n?.interactiveOnly,preferredBackend:n?.preferredBackend,customActions:n?.customActions,depth:n?.depth,scope:n?.scope,raw:n?.raw},kn(r,n?.signal)),{backend:`xctest`})),a=i.nodes??[],o=On(n,i.quality);if(a.length===0&&t.kind===`simulator`&&!o)throw new e(`COMMAND_FAILED`,`XCTest snapshot returned 0 nodes on iOS simulator.`);let s=En(i);return{nodes:Dn(t,n,i),truncated:i.truncated??!1,backend:`xctest`,producer:`apple-runner`,...i.quality?{quality:i.quality}:{},...i.systemSurface?{systemSurface:i.systemSurface}:{},...s.length>0?{warnings:s}:{}}}function En(e){let t=[];return!e.quality&&e.message&&t.push(e.message),e.systemSurface&&t.push(ye),t}function Dn(e,t,n){return r(e)?n.nodes??[]:_n(e.id,t,n)}function On(e,t){return i(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 An(e,t){let n=e[t];return typeof n==`string`?n:void 0}function jn(t){let n=t.orientation;if(typeof n==`string`&&ie.includes(n))return n;throw new e(`COMMAND_FAILED`,`iOS runner returned an invalid orientation result`,{orientation:n})}function Mn(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`)};return ue(i,n=>Ne(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 Nn(e,t,n={},r){if(Pn(e,n.surface)){await Ke(t,{surface:n.surface,fullscreen:n.fullscreen});return}if(n.captureBackend===`runner`){await H(e,t,n.appBundleId,n.fullscreen,r);return}await At(e,t,{appBundleId:n.appBundleId,pixelDensity:n.pixelDensity,fullscreen:n.fullscreen,runnerOptions:r,normalizeStatusBar:n.normalizeStatusBar,skipIosSimulatorBootCheck:n.skipIosSimulatorBootCheck})}function Pn(e,t){return r(e)&&t!==void 0&&t!==`app`}function Fn(e,t){return r(e)&&t!==void 0&&t!==`app`}async function In(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 Ln(e,t,n,r){let i=await O(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{Cn as createAppleInteractor};
|
|
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=Qe[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=$e[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=et[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 ct(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||lt(e.dataNetwork)||e.operatorName!==void 0)&&t.push(`--cellularBars`,e.cellularBars),e.operatorName!==void 0&&t.push(`--operatorName`,e.operatorName),t}function lt(e){return!!(e&&e!==`hide`&&e!==`wifi`)}function ut(e,t,n){p({level:`warn`,phase:`ios_screenshot_status_bar_${t}`,data:{platform:e.platform,deviceKind:e.kind,deviceId:e.id,...S(n)}})}let z=null,dt;async function ft(t,n,i,a,o){if(r(t)){let t=n.toLowerCase();if(t===`appearance`){await Be(i);return}if(t===`permission`){let t=u(i);if(t===`deny`)throw new e(`INVALID_ARGS`,f(`permission`));let n=mt(o?.permissionTarget);return await We(t,n)}throw new e(`INVALID_ARGS`,f(n))}A(t,`settings`),await j(t);let s=n.toLowerCase();switch(s){case`clear-app-state`:{if(i.toLowerCase()!==`clear`)throw new e(`INVALID_ARGS`,`settings clear-app-state only supports clear.`);if(!a)throw new e(`INVALID_ARGS`,`settings clear-app-state requires an app id or an active app session.`);let n=await pt(t,a);return{bundleId:n.bundleId,containerPath:n.containerPath,cleared:!0}}case`reset-keychain`:if(i.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=M(i)?`active`:`failed`;await T(t,[`status_bar`,t.id,`override`,`--wifiMode`,e]),I(t);return}case`airplane`:M(i)?(await T(t,[`status_bar`,t.id,`override`,`--dataNetwork`,`hide`,`--wifiMode`,`failed`,`--wifiBars`,`0`,`--cellularMode`,`failed`,`--cellularBars`,`0`,`--operatorName`,``]),I(t)):(await T(t,[`status_bar`,t.id,`clear`]),L(t));return;case`location`:{if(i.toLowerCase()===`set`){let{latitude:e,longitude:n}=d(o);return await T(t,[`location`,t.id,`set`,`${e},${n}`]),{latitude:e,longitude:n}}let n=M(i);if(!a)throw new e(`INVALID_ARGS`,`location setting requires an active app in session`);let r=n?`grant`:`revoke`;await T(t,[`privacy`,t.id,r,`location`,a]);return}case`faceid`:case`touchid`:{let e=s,n=_t[e];await Tt(t,wt(i,e),{settingName:e,label:n.label,modalityAliases:n.modalityAliases});return}case`appearance`:{let e=await ht(t,i);await T(t,[`ui`,t.id,`appearance`,e]);return}case`permission`:if(!a)throw new e(`INVALID_ARGS`,`permission setting requires an active app in session`);await yt(t,vt(u(i)),Ct(o?.permissionTarget,o?.permissionMode),a);return;default:throw new e(`INVALID_ARGS`,`Unsupported setting: ${n}`)}}async function pt(t,r){if(!n(t)||t.kind!==`simulator`)throw new e(`UNSUPPORTED_OPERATION`,`Clearing app state is currently supported only on iOS simulators.`);let i=await Re(t,r);await j(t),await k(t,i);let a=m(await T(t,[`get_app_container`,t.id,i,`data`],{allowFailure:!0}),`simctl get_app_container failed for ${i}`).stdout.trim();if(!a)throw new e(`COMMAND_FAILED`,`simctl get_app_container returned an empty data container path for ${i}`);let o=await Ee(a);return await Promise.all(o.map(e=>Te(N.join(a,e)))),{bundleId:i,containerPath:a}}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 ht(t,n){let r=He(n);if(r!==`toggle`)return r;let i=m(await T(t,[`ui`,t.id,`appearance`],{allowFailure:!0}),`Failed to read current iOS appearance`),a=gt(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 gt(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 _t={faceid:{label:`Face ID`,modalityAliases:[`face`]},touchid:{label:`Touch ID`,modalityAliases:[`finger`,`touch`]}};function vt(e){return e===`deny`?`revoke`:e}async function yt(t,n,r,i){let a=await xt(t);if(!a.has(r))throw new e(`UNSUPPORTED_OPERATION`,`iOS simctl privacy does not support service "${r}" on this runtime.`,{deviceId:t.id,appBundleId:i,hint:`Supported services: ${Array.from(a).sort().join(`, `)}`});let o=[`privacy`,t.id,n,r,i],s=r===`notifications`;if(!(n===`reset`&&s))try{await T(t,o);return}catch(n){throw s&&bt(n)?new e(`UNSUPPORTED_OPERATION`,`iOS simulator does not support setting notifications permission via simctl privacy on this runtime.`,{deviceId:t.id,appBundleId:i,hint:`Use reset notifications for reprompt behavior, or toggle notifications manually in Settings.`}):n}try{await T(t,o);return}catch(e){if(!bt(e))throw e}try{await T(t,[`privacy`,t.id,`reset`,`all`,i])}catch(n){throw new e(`COMMAND_FAILED`,`iOS simulator blocked direct notifications reset. Fallback reset-all also failed.`,{deviceId:t.id,appBundleId:i,hint:`Use reinstall to force a fresh notifications prompt, or reset simulator content and settings.`},n instanceof Error?n:void 0)}}function bt(t){if(!(t instanceof e)||t.code!==`COMMAND_FAILED`)return!1;let n=String(t.details?.stderr??``).toLowerCase();return(n.includes(`failed to grant access`)||n.includes(`failed to revoke access`)||n.includes(`failed to reset access`))&&n.includes(`operation not permitted`)}async function xt(t){let n=pe(t.simulatorSetPath),r=`${oe(`PATH`)??``}::${n??``}`;if(z&&dt===r)return z;let i=await T(t,[`privacy`,`help`],{allowFailure:!0}),a=St(`${i.stdout}\n${i.stderr}`);if(a.size===0)throw new e(`COMMAND_FAILED`,`Unable to determine supported simctl privacy services`,{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode,hint:"Run `xcrun simctl privacy help` manually to verify available services for this runtime."});return z=a,dt=r,a}function St(e){let t=new Set,n=!1;for(let r of e.split(`
|
|
5
|
+
`)){let e=r.trim();if(!e)continue;if(e===`service`){n=!0;continue}if(!n)continue;if(e.startsWith(`bundle identifier`))break;let i=/^([a-z-]+)\s+-\s+/.exec(e)?.[1];i!==void 0&&t.add(i)}return t}function Ct(t,n){let r=ee(t);if(r!==`photos`&&n?.trim())throw new e(`INVALID_ARGS`,`Permission mode is only supported for photos. Received: ${n}.`);if(r===`camera`)return`camera`;if(r===`microphone`)return`microphone`;if(r===`contacts`)return`contacts`;if(r===`contacts-limited`)return`contacts-limited`;if(r===`notifications`)return`notifications`;if(r===`calendar`)return`calendar`;if(r===`location`)return`location`;if(r===`location-always`)return`location-always`;if(r===`media-library`)return`media-library`;if(r===`motion`)return`motion`;if(r===`reminders`)return`reminders`;if(r===`siri`)return`siri`;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.`)}throw new e(`INVALID_ARGS`,`Unsupported permission target: ${t}. Use camera|microphone|photos|contacts|contacts-limited|notifications|calendar|location|location-always|media-library|motion|reminders|siri.`)}function wt(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 Tt(t,n,r){let i=Et(t.id,n,r.modalityAliases),a=[];for(let e of i){let n=Me(t,e),r=await je(n,{allowFailure:!0});if(r.exitCode===0)return;a.push({args:n,stderr:r.stderr,stdout:r.stdout,exitCode:r.exitCode})}let o=Ve(a);throw a.length>0&&a.every(e=>Dt(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 Et(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 Dt(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 B(e,t,n){return w(e,t,n)}const Ot={ensureBooted:j,prepareStatusBarForScreenshot:tt,captureWithRetry:Mt,normalizeDensity:Vt,captureWithRunner:H,shouldFallbackToRunner:zt},kt=new Map,V=new Map;async function At(e,t,n={}){if(r(e)){await H(e,t,n.appBundleId,n.fullscreen,n.runnerOptions);return}if(e.kind===`simulator`){await jt(e,t,n);return}await C(e).captureScreenshot(e,t,{appBundleId:n.appBundleId,fullscreen:n.fullscreen,runnerOptions:n.runnerOptions,runRunnerCommand:O})}async function jt(t,n,r={}){if(t.kind!==`simulator`)throw new e(`UNSUPPORTED_OPERATION`,`Simulator screenshot fallback flow supports only iOS simulators`);let i={...Ot,...r.deps??{}};r.skipIosSimulatorBootCheck||await i.ensureBooted(t);let a=async()=>{};if(r.normalizeStatusBar===!0)try{a=await i.prepareStatusBarForScreenshot(t)}catch(e){Lt(t,`prepare_failed`,e)}try{try{await i.captureWithRetry(t,n),await i.normalizeDensity(t,n,r.pixelDensity);return}catch(e){let a=e;if(r.skipIosSimulatorBootCheck&&Bt(e)){await i.ensureBooted(t);try{await i.captureWithRetry(t,n),await i.normalizeDensity(t,n,r.pixelDensity);return}catch(e){a=e}}if(!i.shouldFallbackToRunner(a))throw a;It(t,`simctl_screenshot`,a)}await i.captureWithRunner(t,n,r.appBundleId,r.fullscreen,r.runnerOptions),await i.normalizeDensity(t,n,r.pixelDensity)}finally{await a().catch(e=>Lt(t,`restore_failed`,e))}}async function Mt(e,t){let n=g.fromTimeoutMs(Oe);await ce(async({deadline:n})=>{await B(e,[`io`,e.id,`screenshot`,t],{timeoutMs:Math.max(1e3,n?.remainingMs()??2e4)})},{maxAttempts:5,baseDelayMs:De,maxDelayMs:ke,jitter:.2,shouldRetry:e=>zt(e)},{deadline:n,phase:`ios_simulator_screenshot`})}async function H(t,n,i,a,o){if(t.kind===`device`&&!r(t)){await C(t).captureScreenshot(t,n,{appBundleId:i,fullscreen:a,runnerOptions:o,preferRunner:!0,runRunnerCommand:O});return}let s=(await O(t,{command:`screenshot`,appBundleId:i,fullscreen:a,inlineScreenshot:!1},o)).message;if(!s)throw new e(`COMMAND_FAILED`,`Failed to capture iOS screenshot: runner returned no file path`);if(r(t)){await y(s,n);return}if(t.kind===`simulator`){await Nt(t,s,n);return}throw new e(`COMMAND_FAILED`,`Unsupported Apple screenshot target`)}async function Nt(t,n,r){let i=g.fromTimeoutMs(b),a=`Unable to locate runner container for simulator screenshot`,o=V.get(t.id);if(o){let e=await Pt(o,n,r);if(e.copied)return;a=e.error,V.delete(t.id)}for(let e of Pe){let o=await B(t,[`get_app_container`,t.id,e,`data`],{allowFailure:!0,timeoutMs:Ft(i,b,`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 Pt(s,n,r);if(c.copied){V.set(t.id,s);return}a=c.error}throw new e(`COMMAND_FAILED`,`Failed to capture iOS screenshot: ${a}`)}async function Pt(e,t,n){let r=`Runner screenshot was not found in the simulator container`;for(let i of Rt(e,t))try{return await y(i,n),{copied:!0}}catch(e){r=e instanceof Error?e.message:String(e)}return{copied:!1,error:r}}function Ft(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 It(e,t,n){let r=S(n);p({level:`warn`,phase:`ios_screenshot_fallback`,data:{platform:e.platform,deviceKind:e.kind,deviceId:e.id,from:t,to:`runner`,...r}})}function Lt(e,t,n){p({level:`warn`,phase:`ios_screenshot_status_bar_${t}`,data:{platform:e.platform,deviceKind:e.kind,deviceId:e.id,...S(n)}})}function Rt(e,t){let n=N.resolve(e),r=t.trim();if(!r)return[];let i=[],a=new Set,o=e=>{let t=N.normalize(e);a.has(t)||(a.add(t),i.push(t))},s=r.replace(/^\/+/,``),c=s.replaceAll(`\\`,`/`);if(s&&o(N.join(n,s)),N.isAbsolute(r)&&o(N.normalize(r)),c.startsWith(`tmp/`))o(N.join(n,c));else{let e=c.lastIndexOf(`/tmp/`);if(e>=0){let t=c.slice(e+1);o(N.join(n,t))}}let l=N.basename(r);return l&&o(N.join(n,`tmp`,l)),i}function zt(t){if(!(t instanceof e)||t.code!==`COMMAND_FAILED`)return!1;let n=x(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 Bt(t){if(!(t instanceof e)||t.code!==`COMMAND_FAILED`)return!1;let n=x(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 Vt(e,t,n){let r=await Ht(e),i=Se(await xe(t),r,n);i&&await he(t,i.width,i.height)}async function Ht(t){let n=kt.get(t.id);if(n!==void 0)return n;let r=await B(t,[`getenv`,t.id,`SIMULATOR_MAINSCREEN_SCALE`],{timeoutMs:Ae}),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 kt.set(t.id,i),i}function Ut(t){return!(t instanceof e)||t.details?.runnerErrorCode!==`SCROLL_KEYBOARD_OCCLUDES_SURFACE`?t:new e(t.code,t.message,{...t.details,...o})}function Wt(e){let t=e?.amount!==void 0||e?.pixels!==void 0;return{...e,...t?{}:{amount:re},durationMs:e?.durationMs??400,releaseBehavior:e?.releaseBehavior??`controlled`}}function Gt(e,t,n,r={includeDuration:!0}){let i=U(e.referenceWidth),o=U(e.referenceHeight);if(i===void 0||o===void 0)return W(e,{amount:n?.amount});let s=a({direction:t,amount:n?.amount,pixels:n?.pixels,referenceWidth:i,referenceHeight:o});return W(e,{amount:n?.amount,pixels:s.pixels,durationMs:r?.includeDuration?n?.durationMs:void 0,preferProvidedPixels:!0})}function Kt(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 U(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}function W(e,t){let{x1:n,y1:r,x2:i,y2:a}=Jt(e),o=U(e.referenceWidth),s=U(e.referenceHeight),c=qt(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=U(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 qt(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 Jt(e){let t=U(e.x),n=U(e.y),r=U(e.x2),i=U(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 Yt(e,t,n,r,i,a){return Gt(await e(t,{command:`desktopScroll`,direction:i,...Kt(a,{includeDuration:!0,includeReleaseBehavior:!1}),appBundleId:n.appBundleId},r),i,a,{includeDuration:!0})}function G(e,t,n){return{command:`remotePress`,remoteButton:e,...n===void 0?{}:{durationMs:n},...t===void 0?{}:{appBundleId:t}}}function Xt(e){return e===`system`?`backSystem`:`backInApp`}function Zt(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 O(e,q(e,t,r,i),n),pressPoint:async(r,i)=>await Qt(e,t,n,r,i),tapElementSelector:async r=>await O(e,{command:`tap`,selectorKey:r.key,selectorValue:r.value,allowNonHittableCoordinateFallback:r.allowNonHittableCoordinateFallback,...r.expectedPoint?{x:r.expectedPoint.x,y:r.expectedPoint.y}:{},...cn(e)?{synthesized:!0}:{},appBundleId:t.appBundleId},n),doubleTap:async(r,i)=>{let a=await O(e,E([{kind:`doubleTap`,x:r,y:i}],t.appBundleId),n);return D(a),a},longPress:async(r,i,a)=>await O(e,{command:`longPress`,x:r,y:i,durationMs:a,appBundleId:t.appBundleId},n),focus:async(r,i)=>await O(e,q(e,t,r,i),n),type:async(r,i)=>nn(await O(e,{command:`type`,text:r,delayMs:i,textEntryMode:r===`
|
|
6
|
+
`?void 0:`append`,appBundleId:t.appBundleId},n)),fill:async(r,i,a,o,s)=>await O(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 ln(O,e,t,n,r,i),performGesture:async r=>await on(e,t,n,r),gestureViewport:async()=>an(await O(e,{command:`gestureViewport`,appBundleId:t.appBundleId},n))}}}async function Qt(e,t,n,i,a){return r(e)&&a.surface&&a.surface!==`app`?await $t(t,i,a):a.button===`primary`?a.count===1?await tn(e,t,n,i,a):await Fe(e,i,a,t.appBundleId,async t=>await O(e,t,n)):await en(e,t,n,i,a.button)}async function $t(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);return await i(n.x,n.y,{bundleId:t.appBundleId,surface:r.surface}),{}}async function en(e,t,n,r,i){return await O(e,{command:`mouseClick`,x:r.x,y:r.y,button:i,appBundleId:t.appBundleId},n)}async function tn(e,t,n,r,i){if(i.doubleTap){let i=await O(e,E([{kind:`doubleTap`,x:r.x,y:r.y}],t.appBundleId),n);return D(i),i}return i.holdMs>0?await O(e,{command:`longPress`,x:r.x,y:r.y,durationMs:i.holdMs,appBundleId:t.appBundleId},n):await O(e,q(e,t,r.x,r.y),n)}function nn(e){let t=e.textEntryRoute;return rn(t)?{textEntryRoute:t}:{}}function rn(e){return typeof e==`string`&&Ce.includes(e)}function an(t){let n=K(t.x),r=K(t.y),i=K(t.x2),a=K(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 K(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}async function on(e,n,i,a){if(a.topology===`two`&&qe(e,a.intent),a.topology===`single`&&r(e)){let{start:t,end:r}=le(a);return await O(e,{command:`drag`,x:t.x,y:t.y,x2:r.x,y2:r.y,durationMs:a.durationMs,appBundleId:n.appBundleId},i)}if(a.topology===`single`&&t(e)){let{start:t,end:r}=le(a);return await O(e,{command:`swipe`,direction:sn(t,r),appBundleId:n.appBundleId},i)}return await O(e,{command:`gesture`,gesturePlan:a,appBundleId:n.appBundleId},i)}function sn(e,t){let n=t.x-e.x,r=t.y-e.y;return Math.abs(n)>=Math.abs(r)?n>=0?`right`:`left`:r>=0?`down`:`up`}function q(e,t,n,r){return{command:`tap`,x:n,y:r,...cn(e)?{synthesized:!0}:{},appBundleId:t.appBundleId}}function cn(e){return n(e)&&!t(e)}async function ln(e,n,i,a,o,c){if(ne(c?.durationMs,{invalidMessage:`scroll durationMs must be a non-negative integer at most ${te}`}),t(n))return W(await e(n,G(o,i.appBundleId,c?.durationMs),a),{amount:c?.amount,durationMs:c?.durationMs});if(s(c??{}),r(n))return await Yt(e,n,i,a,o,c);let l=Wt(c),u;try{u=await e(n,{command:`scroll`,direction:o,...Kt(l),appBundleId:i.appBundleId},a)}catch(e){throw Ut(e)}return Gt(u,o,l)}function J(e,t,n){if(r(e)){let e=n?.surface===`frontmost-app`?{surface:n.surface}:{bundleId:n?.appBundleId,surface:n?.surface};return async t=>await Ge(t,e)}return async(r,i)=>await O(e,{command:`alert`,action:r,appBundleId:n?.appBundleId,timeoutMs:i},t)}async function un(e,t,n){return await J(e,t,n)(`get`,c)}async function dn(t,n,r){let i=J(t,n,r),a=r?.timeoutMs??1e4,o=Date.now(),s=!0;for(;Date.now()-o<a;){try{let e=s?a:pn(o,a);return s=!1,await i(`get`,e)}catch(e){if(!Y(e))throw e}await h(300)}throw new e(`COMMAND_FAILED`,`alert wait timed out`)}async function fn(e,t,r,i){let a=J(e,t,i),o=n(e)?c:l,s=Date.now(),u,d=!0;for(;Date.now()-s<l;){try{let e=d?o:pn(s,l);return d=!1,await a(r,e)}catch(e){if(u=e,!Y(e))break}await h(300)}throw mn(u)}function pn(e,t){return Math.max(1,t-(Date.now()-e))}function mn(t){return!(t instanceof e)||!Y(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 Y(t){if(!(t instanceof e))return!1;let n=t.details??{};return n.runnerErrorCode===`ALERT_NOT_FOUND`||n.reason===`alert-not-found`}function hn(e){let t=gn(e.systemSurface);return{nodes:Array.isArray(e.nodes)?e.nodes:void 0,truncated:typeof e.truncated==`boolean`?e.truncated:void 0,quality:me(e.snapshotQuality),qualityPayload:bn(e.qualityPayload,t),runnerFatal:e.runnerFatal===!0,...t?{systemSurface:t}:{},message:typeof e.message==`string`&&e.message.trim().length>0?e.message:void 0}}function gn(e){if(!X(e)||typeof e.bundleId!=`string`)return;let t=ye(e.bundleId);return t&&{bundleId:t.bundleId,kind:t.kind}}function _n(e,t,n){let r=n.nodes??[];if(n.runnerFatal===!0||r.length===0&&n.qualityPayload===void 0)return r;let i=fe({raw:t?.raw,interactiveOnly:t?.interactiveOnly,depth:t?.depth,scope:t?.scope,customActions:t?.customActions}),a=xn(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:de(i),viewport:a,hittability:{kind:`available`},lineage:{targetId:e},residue:[]}};try{return we(o,i).nodes}catch(e){vn(e,n)}}function vn(t,n){let r=n.quality;if(t instanceof _&&_e(r))throw new e(`COMMAND_FAILED`,t.message,{...v(t),...n.systemSurface?{systemSurface:n.systemSurface}:{},snapshotQuality:{state:r.state,backend:r.backend,...r.reason?{reason:r.reason}:{},...r.reasonCode?{reasonCode:r.reasonCode}:{}},hint:yn(n.systemSurface,r)},t);Z(t,n.systemSurface)}function yn(e,t){return[e?`${e.bundleId} hosts the surface presented over the app, and this capture targeted that surface.`:void 0,...ge(t,[])].filter(e=>e!==void 0).join(` `)}function bn(e,t){if(e!==void 0)return(!X(e)||!Array.isArray(e.nodes)||typeof e.truncated!=`boolean`)&&Z(new _(`invalid-quality-payload`,`iOS runner returned an invalid quality payload`),t),e.scope!==void 0&&e.scope!==null&&Z(new _(`invalid-quality-payload`,`iOS runner quality payload must be unscoped`,{field:`scope`}),t),{nodes:e.nodes,truncated:e.truncated,scope:null}}function xn(e,t){return be(Sn(t),{fallbackToLargestRoot:!0})??be(Sn(e),{fallbackToLargestRoot:!0})??{kind:`missing`,reason:`not-provided`}}function Sn(e){return e?.filter(e=>e.parentIndex===void 0)??[]}function X(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Z(t,n){throw t instanceof _?new e(`COMMAND_FAILED`,t.message,{...v(t),...n?{systemSurface:n}:{}},t):t}function Cn(n,r,i){if(n.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:a,runnerOpts:o}=Zt(n,r),s={open:(e,t)=>Ie(n,e,{appBundleId:t?.appBundleId,launchConsole:t?.launchConsole,launchArgs:t?.launchArgs,terminateRunningApp:t?.terminateRunningApp,url:t?.url,runnerOptions:o}),openDevice:()=>Le(n),close:e=>k(n,e,o),screenshot:(e,t)=>Nn(n,e,t,o),snapshot:async e=>await wn(n,e,o),readTextAtPoint:async(e,t)=>Fn(n,t?.surface)?await In(e,t):await Ln(n,e,t,o),findText:async(e,t)=>({found:(await O(n,{command:`findText`,text:e,appBundleId:t?.appBundleId},t?.signal?{...o,signal:t.signal}:o))?.found===!0}),back:async e=>{if(t(n)){await O(n,G(`menu`,r.appBundleId),o);return}await O(n,{command:Xt(e),appBundleId:r.appBundleId},o)},home:async()=>{if(t(n)){await O(n,G(`home`,r.appBundleId),o);return}await O(n,{command:`home`,appBundleId:r.appBundleId},o)},setOrientation:async t=>{let i=jn(await O(n,{command:`rotate`,orientation:t,appBundleId:r.appBundleId},o));if(i!==t)throw new e(`COMMAND_FAILED`,`iOS runner observed ${i} after requesting ${t}`,{requestedOrientation:t,observedOrientation:i});return{orientation:i}},appSwitcher:async()=>{await O(n,{command:`appSwitcher`,appBundleId:r.appBundleId},o)},tvRemote:async(e,t)=>{await O(n,G(se(e),r.appBundleId,t),o)},keyboardDismiss:async()=>{let e=await O(n,{command:`keyboardDismiss`,appBundleId:r.appBundleId},o);return{kind:`mechanism`,wasVisible:Q(e,`wasVisible`),dismissed:Q(e,`dismissed`),visible:Q(e,`visible`),mechanism:An(e,`keyboardDismissMechanism`)}},keyboardEnter:async()=>{let e=await O(n,{command:`keyboardReturn`,appBundleId:r.appBundleId},o);return{kind:`visibility-echo`,visible:Q(e,`visible`),wasVisible:Q(e,`wasVisible`)}},readClipboard:()=>Ye(n),writeClipboard:e=>Xe(n,e),setSetting:(e,t,r,i)=>ft(n,e,t,r,i),readAlert:e=>un(n,o,e),awaitAlert:e=>dn(n,o,e),acceptAlert:e=>fn(n,o,`accept`,e),dismissAlert:e=>fn(n,o,`dismiss`,e),...a};return i?Mn(n,r,s,i):s}async function wn(e,t,n){return r(e)&&t?.surface&&t.surface!==`app`?await Je(t,t.signal):await Tn(e,t,n)}async function Tn(t,n,r){let i=hn(await ae(`snapshot_capture`,async()=>await O(t,{command:`snapshot`,appBundleId:n?.appBundleId,interactiveOnly:n?.interactiveOnly,preferredBackend:n?.preferredBackend,customActions:n?.customActions,depth:n?.depth,scope:n?.scope,raw:n?.raw},kn(r,n?.signal)),{backend:`xctest`})),a=i.nodes??[],o=On(n,i.quality);if(a.length===0&&t.kind===`simulator`&&!o)throw new e(`COMMAND_FAILED`,`XCTest snapshot returned 0 nodes on iOS simulator.`);let s=En(i);return{nodes:Dn(t,n,i),truncated:i.truncated??!1,backend:`xctest`,producer:`apple-runner`,...i.quality?{quality:i.quality}:{},...i.systemSurface?{systemSurface:i.systemSurface}:{},...s.length>0?{warnings:s}:{}}}function En(e){let t=[];return!e.quality&&e.message&&t.push(e.message),e.systemSurface&&t.push(ve(e.systemSurface.bundleId)),t}function Dn(e,t,n){return r(e)?n.nodes??[]:_n(e.id,t,n)}function On(e,t){return i(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 An(e,t){let n=e[t];return typeof n==`string`?n:void 0}function jn(t){let n=t.orientation;if(typeof n==`string`&&ie.includes(n))return n;throw new e(`COMMAND_FAILED`,`iOS runner returned an invalid orientation result`,{orientation:n})}function Mn(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`)};return ue(i,n=>Ne(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 Nn(e,t,n={},r){if(Pn(e,n.surface)){await Ke(t,{surface:n.surface,fullscreen:n.fullscreen});return}if(n.captureBackend===`runner`){await H(e,t,n.appBundleId,n.fullscreen,r);return}await At(e,t,{appBundleId:n.appBundleId,pixelDensity:n.pixelDensity,fullscreen:n.fullscreen,runnerOptions:r,normalizeStatusBar:n.normalizeStatusBar,skipIosSimulatorBootCheck:n.skipIosSimulatorBootCheck})}function Pn(e,t){return r(e)&&t!==void 0&&t!==`app`}function Fn(e,t){return r(e)&&t!==void 0&&t!==`app`}async function In(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 Ln(e,t,n,r){let i=await O(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{Cn as createAppleInteractor};
|
package/dist/src/interactors.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{r as e}from"./rolldown-runtime.js";import{C as t}from"./sdk-contracts.js";import{v as n}from"./sdk-device.js";import{n as r,t as i}from"./register-builtins.js";import{AsyncLocalStorage as a}from"node:async_hooks";let o=[];const s=new a;async function c(e,t){return await s.run([...e],t)}function l(e,t){for(let n of d()){if(!n.ownsDevice(e))continue;let r=n.getInteractor(e,t);if(r)return r}}function u(e){return d().some(t=>t.ownsDevice(e))}function d(){return s.getStore()??o}function f(e,t={}){C(e);let n=e.map(e=>e.provider);return{providerRuntimes:Object.freeze([...e]),providerRuntimeIds:n,providerRuntimeRequiredIds:v([...n,...t.providerRuntimeRequiredIds??[]]),leaseLifecycleProvider:y(e),recoverableProviderIds:e.filter(e=>e.recoverExpiredLease!==void 0).map(e=>e.provider),recoverExpiredLease:_(e),cloudArtifactProvider:b(e),providerAppCatalog:x(e),deviceInventorySource:S(e),appleRunnerProvider:m(e),appleRunnerScreenRecordingTransport:p(e),providerDeviceRuntimeScope:async t=>await c(e,t)}}function p(e){if(e.some(g))return t=>{for(let n of e){if(!g(n)||!n.ownsDevice(t.device))continue;let e=n.getAppleRunnerScreenRecordingTransport(t.device);if(e)return e}}}function m(e){if(e.some(h))return t=>{for(let n of e){if(!h(n)||!n.ownsDevice(t.device))continue;let e=n.getAppleRunnerProvider(t.device);if(e)return e}}}function h(e){return`getAppleRunnerProvider`in e&&typeof e.getAppleRunnerProvider==`function`}function g(e){return`getAppleRunnerScreenRecordingTransport`in e&&typeof e.getAppleRunnerScreenRecordingTransport==`function`}function _(e){if(e.some(e=>e.recoverExpiredLease!==void 0))return async n=>{let r=e.find(e=>E(e,n.leaseProvider));if(!r?.recoverExpiredLease)throw new t(`UNSUPPORTED_OPERATION`,`Provider ${n.leaseProvider??`unknown`} cannot recover an expired lease.`,{provider:n.leaseProvider,leaseId:n.leaseId});await r.recoverExpiredLease(n)}}function v(e){return[...new Set(e)]}function y(e){if(e.length!==0)return{allocate:async(t,n)=>await T(e,`allocate`,t,n),heartbeat:async(t,n)=>await T(e,`heartbeat`,t,n),release:async(t,n)=>await T(e,`release`,t,n)}}function b(e){if(e.length!==0)return{listCloudArtifacts:async t=>await w(e,t)}}function x(e){let n=e.filter(e=>e.appCatalog!==void 0);if(n.length!==0)return{supports:e=>n.some(t=>E(t,e)),list:async(e,r)=>{let i=n.find(t=>E(t,e.provider));if(!i?.appCatalog)throw new t(`UNSUPPORTED_OPERATION`,`Provider ${e.provider} does not expose an app catalog.`,{provider:e.provider});return await i.appCatalog(e,r)}}}function S(e){if(e.length!==0)return{discover:async(t,n)=>{n.throwIfAborted();for(let r of e){if(!E(r,t.leaseProvider))continue;let e=await r.deviceInventoryProvider(t,n);if(n.throwIfAborted(),e!=null)return{kind:`inventory`,devices:e}}return{kind:`declined`}}}}function C(e){let t=new Set;for(let n of e){if(t.has(n.provider))throw TypeError(`Duplicate provider device runtime: ${n.provider}`);t.add(n.provider)}}async function w(e,t){for(let n of e){if(!E(n,t.provider))continue;let e=await n.cloudArtifacts?.listCloudArtifacts?.(t);if(e)return e}}async function T(e,t,n,r){for(let i of e){if(!E(i,n.leaseProvider))continue;let e=i.leaseLifecycle[t],a=e?await e(n,r):void 0;if(a)return a}}function E(e,t){return e.provider===t}var D=e({getInteractor:()=>O,getLocalInteractor:()=>k});i();async function O(e,r){if(u(e)){let i=l(e,r);if(i)return i;throw new t(`UNSUPPORTED_OPERATION`,`Provider device runtime does not have an active interactor for this device.`,{deviceId:e.id,platform:n(e)})}return await k(e,r)}async function k(e,t){return await r(e.platform).createInteractor(e,t)}export{u as i,D as n,f as r,O as t};
|
package/dist/src/internal/bin.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
async function e(e,n,r){try{await t(e,n,r)}catch(e){r.stderr(`${e instanceof Error?e.message:String(e)}\n`),await(await n.processExit()).exitAfterFlush(1)}}async function t(e,t,l){if(e.length===0)return await n(t,l);if(o(e))return await r(t,l);let u=c(e);if(u!==void 0)return await i(u,e,t,l);if(s(e))return await(await t.mcp()).runAgentDeviceMcpServer();await a(e,t)}async function n(e,t){t.stdout(`${(await e.help()).buildUsageText()}\n`),await(await e.processExit()).exitAfterFlush(1)}async function r(e,t){t.stdout(`${t.bundledVersion??(await e.version()).readVersion()}\n`)}async function i(e,t,n,r){let i=await n.help(),o=e===null?`${i.buildUsageText()}\n`:i.resolveHelpTargetUsageText(e);if(o===null)return await a(t,n);r.stdout(o)}async function a(e,t){await(await t.cli()).runCliProcess(e)}function o(e){return e.length===1&&(e[0]===`--version`||e[0]===`-V`)}function s(e){return e[0]===`mcp`&&!e.some(l)}function c(e){let[t,n]=e;if(e.length===1)return t===`help`||l(t)?null:void 0;if(e.length===2)return t===`help`?n:l(n)?t:void 0}function l(e){return e===`--help`||e===`-h`}e(process.argv.slice(2),{help:()=>import(`../cli-help.js`).then(e=>e.n),cli:()=>import(`../process-entry.js`),mcp:()=>import(`../server.js`),version:()=>import(`../version.js`).then(e=>e.t),processExit:()=>import(`../process-exit.js`)},{bundledVersion:`0.21.
|
|
1
|
+
async function e(e,n,r){try{await t(e,n,r)}catch(e){r.stderr(`${e instanceof Error?e.message:String(e)}\n`),await(await n.processExit()).exitAfterFlush(1)}}async function t(e,t,l){if(e.length===0)return await n(t,l);if(o(e))return await r(t,l);let u=c(e);if(u!==void 0)return await i(u,e,t,l);if(s(e))return await(await t.mcp()).runAgentDeviceMcpServer();await a(e,t)}async function n(e,t){t.stdout(`${(await e.help()).buildUsageText()}\n`),await(await e.processExit()).exitAfterFlush(1)}async function r(e,t){t.stdout(`${t.bundledVersion??(await e.version()).readVersion()}\n`)}async function i(e,t,n,r){let i=await n.help(),o=e===null?`${i.buildUsageText()}\n`:i.resolveHelpTargetUsageText(e);if(o===null)return await a(t,n);r.stdout(o)}async function a(e,t){await(await t.cli()).runCliProcess(e)}function o(e){return e.length===1&&(e[0]===`--version`||e[0]===`-V`)}function s(e){return e[0]===`mcp`&&!e.some(l)}function c(e){let[t,n]=e;if(e.length===1)return t===`help`||l(t)?null:void 0;if(e.length===2)return t===`help`?n:l(n)?t:void 0}function l(e){return e===`--help`||e===`-h`}e(process.argv.slice(2),{help:()=>import(`../cli-help.js`).then(e=>e.n),cli:()=>import(`../process-entry.js`),mcp:()=>import(`../server.js`),version:()=>import(`../version.js`).then(e=>e.t),processExit:()=>import(`../process-exit.js`)},{bundledVersion:`0.21.4`,stdout:e=>{process.stdout.write(e)},stderr:e=>{process.stderr.write(e)}}).catch(()=>process.exit(1));export{};
|