agent-device 0.21.17 → 0.21.19
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.17.apk → agent-device-android-ime-helper-0.21.19.apk} +0 -0
- package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.19.apk.sha256 +1 -0
- package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.17.manifest.json → agent-device-android-ime-helper-0.21.19.manifest.json} +4 -4
- package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.21.17.apk → agent-device-android-snapshot-helper-0.21.19.apk} +0 -0
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.19.apk.sha256 +1 -0
- package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.21.17.manifest.json → agent-device-android-snapshot-helper-0.21.19.manifest.json} +6 -6
- package/dist/src/adapter.js +1 -1
- package/dist/src/adb-executor.js +2 -2
- package/dist/src/adb-failure.js +2 -1
- package/dist/src/agent-browser-lifecycle.js +1 -1
- package/dist/src/agent-browser-process-record.js +1 -1
- package/dist/src/agent-browser-provider.js +1 -1
- package/dist/src/agent-device-client.js +2 -2
- package/dist/src/ai-sdk.js +1 -1
- package/dist/src/alert-runtime.js +1 -1
- package/dist/src/android-input-ownership.js +1 -1
- package/dist/src/android.js +1 -1
- package/dist/src/app-log-runtime2.js +1 -1
- package/dist/src/cache.js +1 -1
- package/dist/src/catalog.js +1 -1
- package/dist/src/cli-help.js +1 -1
- package/dist/src/cli.js +4 -4
- package/dist/src/client-types.d.ts +11 -4
- package/dist/src/command-metadata.js +1 -1
- package/dist/src/command-tools.js +2 -2
- package/dist/src/contracts.js +1 -1
- package/dist/src/daemon-client-lease-beat.js +1 -1
- package/dist/src/daemon-client-lifecycle.js +1 -1
- package/dist/src/daemon-client-transport.js +1 -1
- package/dist/src/daemon-policy-file.js +1 -1
- package/dist/src/device-claim-inspection.js +1 -1
- package/dist/src/device-claim-rule.js +1 -1
- 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/diagnostics2.js +1 -1
- package/dist/src/durable-resource.js +1 -1
- package/dist/src/engine-eval-script.js +1 -1
- package/dist/src/error.js +1 -1
- package/dist/src/find.js +1 -1
- package/dist/src/finders.js +1 -1
- package/dist/src/generic-settle.js +1 -1
- package/dist/src/gesture-runtime.js +1 -1
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.js +1 -1
- package/dist/src/input-actions2.js +2 -2
- package/dist/src/install-source-network-transport.js +1 -1
- package/dist/src/interaction-positionals.js +1 -1
- package/dist/src/interaction-ref-policy.js +1 -1
- package/dist/src/interaction.js +1 -1
- package/dist/src/interaction2.js +1 -1
- package/dist/src/interactor.js +5 -5
- package/dist/src/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-snapshot-acquisition.js +1 -1
- package/dist/src/ios-snapshot-engine.js +1 -1
- package/dist/src/lease.js +1 -1
- package/dist/src/local-interactor-operation-set.js +1 -1
- package/dist/src/mechanics.js +16 -17
- package/dist/src/mobile-snapshot-semantics.js +1 -1
- package/dist/src/observe-until.js +1 -0
- package/dist/src/overlay.js +2 -2
- package/dist/src/parameterized-recorded-fill.js +1 -1
- package/dist/src/perf-facade.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-managed-owner.js +1 -1
- package/dist/src/platform-runtime-operation-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/platform-runtime2.js +1 -1
- package/dist/src/png-worker-client.js +1 -1
- package/dist/src/provider-device-admission.js +1 -0
- package/dist/src/provider-webdriver.js +1 -1
- package/dist/src/proxy.js +1 -1
- package/dist/src/react-native.js +1 -1
- package/dist/src/record-runtime.js +1 -1
- package/dist/src/registry.js +36 -36
- package/dist/src/replay-divergence.js +1 -1
- package/dist/src/replay.js +1 -1
- package/dist/src/request-admission.js +1 -1
- package/dist/src/request-runtime-binding.js +1 -1
- package/dist/src/runner-cache-metadata.js +2 -2
- package/dist/src/runner-client.js +1 -1
- package/dist/src/runner-dev-tools-security.js +1 -1
- package/dist/src/runner-disposal.js +1 -1
- package/dist/src/runner-error-classification.js +3 -3
- package/dist/src/runner-exchange.js +1 -1
- package/dist/src/runner-start-budget.js +1 -1
- package/dist/src/runner-startup-transport.js +1 -1
- package/dist/src/runner-xctestrun.js +1 -1
- package/dist/src/runner.js +1 -1
- package/dist/src/runtime-admission.js +1 -0
- package/dist/src/runtime.js +1 -1
- package/dist/src/runtime10.js +2 -2
- package/dist/src/runtime2.js +1 -1
- package/dist/src/runtime3.js +1 -1
- package/dist/src/runtime4.js +4 -4
- package/dist/src/runtime5.js +1 -1
- package/dist/src/runtime6.js +1 -1
- package/dist/src/runtime7.js +1 -1
- package/dist/src/runtime8.js +1 -1
- package/dist/src/runtime9.js +1 -1
- package/dist/src/screen-recording-resource-recovery.js +1 -1
- package/dist/src/screenshot-runtime.js +1 -1
- package/dist/src/script.js +1 -1
- package/dist/src/scroll-gesture.js +1 -1
- package/dist/src/sdk-batch-runner.js +2 -2
- package/dist/src/sdk-batch.js +1 -1
- package/dist/src/sdk-contracts.d.ts +16 -2
- package/dist/src/sdk-contracts.js +2 -2
- package/dist/src/sdk-finders.js +1 -1
- package/dist/src/sdk-selectors.d.ts +9 -0
- package/dist/src/sdk-selectors.js +1 -1
- package/dist/src/selection.js +0 -0
- package/dist/src/selector-pipeline-policy.js +1 -0
- package/dist/src/selector-runtime.js +1 -1
- package/dist/src/selectors.js +1 -1
- package/dist/src/server.js +1 -1
- package/dist/src/session-runtime-admission.js +1 -1
- package/dist/src/session-snapshot.js +1 -1
- package/dist/src/session-store.js +3 -3
- package/dist/src/session2.js +5 -5
- package/dist/src/snapshot-desktop-projection.js +1 -1
- package/dist/src/snapshot-runtime-binding.js +1 -1
- package/dist/src/snapshot-runtime.js +1 -1
- package/dist/src/snapshot-state.js +1 -1
- package/dist/src/snapshot4.js +1 -1
- package/dist/src/src.js +1 -1
- package/dist/src/src7.js +1 -1
- package/dist/src/target-evidence.js +1 -1
- package/dist/src/text-entry-focus.js +1 -1
- package/dist/src/touch-runtime.js +1 -1
- package/dist/src/touch-runtime2.js +1 -0
- package/dist/src/tree.js +1 -1
- package/dist/src/type-text-runtime.js +1 -1
- package/dist/src/video.js +1 -1
- package/package.json +1 -1
- package/server.json +2 -2
- package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.17.apk.sha256 +0 -1
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.17.apk.sha256 +0 -1
- package/dist/src/runner-command-traits.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{g as e,u as t}from"./sdk-device.js";import{
|
|
1
|
+
import{g as e,u as t}from"./sdk-device.js";import{$t as n,Xt as r,Zt as i}from"./sdk-batch.js";const a=4096;function o(e){return c(e,{seen:new WeakSet,nodes:0},0)}function s(e){return Object.freeze(Object.fromEntries(Object.entries(e).map(([e,t])=>[e,p(t)])))}function c(e,t,n){if(!d(e)||n>32||t.seen.has(e))return!1;t.seen.add(e),t.nodes+=1;let r=t.nodes<=a&&Object.values(e).every(e=>l(e,t,n+1));return t.seen.delete(e),r}function l(e,t,n){return f(e)?!0:n>32?!1:Array.isArray(e)?u(e,t,n):c(e,t,n)}function u(e,t,n){if(t.seen.has(e))return!1;t.seen.add(e),t.nodes+=1;let r=t.nodes<=a&&e.every(e=>l(e,t,n+1));return t.seen.delete(e),r}function d(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function f(e){return e===null?!0:typeof e==`number`?Number.isFinite(e):typeof e==`string`||typeof e==`boolean`}function p(e){return Array.isArray(e)?Object.freeze(e.map(p)):typeof e==`object`&&e?s(e):e}function m(e){if(!P(e))return _(`Durable resource envelope must be an object`);let t=e.envelopeVersion;if(!N(t))return _(`Durable resource envelopeVersion must be a non-negative integer`);if(t!==1)return{status:`unreattachable`,reason:`descriptor-version-unsupported`,message:`Unsupported durable resource envelope version: ${t}`,version:t};if(!M(e.resourceKind))return _(`Durable resource resourceKind must be a non-empty string`);if(!M(e.sessionId))return _(`Durable resource sessionId must be a non-empty string`);let n=y(e.device);if(!n)return _(`Durable resource device identity is invalid`);let r=v(e.owner);if(!r)return _(`Durable resource owner reference is invalid`);if(r.kind===`local-family`&&r.family!==n.family)return _(`Durable resource local owner does not match the device family`);let i=D(e.fence);if(!i)return _(`Durable resource ownership fence is invalid`);if(!k(e.lifecycle))return _(`Durable resource lifecycle state is invalid`);let a=O(e.descriptor);return a?e.metadata!==void 0&&!o(e.metadata)?_(`Durable resource metadata must be a JSON object`):{status:`decoded`,envelope:Object.freeze({envelopeVersion:1,resourceKind:e.resourceKind,sessionId:e.sessionId,device:n,owner:r,fence:i,lifecycle:e.lifecycle,descriptor:a,...e.metadata===void 0?{}:{metadata:s(e.metadata)}})}:_(`Durable resource descriptor is invalid`)}function h(e,t){return Object.freeze({version:e.version,body:s(e.encode(t))})}function g(e){let t=m({envelopeVersion:1,...e});if(t.status!==`decoded`)throw TypeError(t.message);return t.envelope}function _(e){return{status:`unreattachable`,reason:`descriptor-invalid`,message:e}}function v(t){return P(t)?t.kind===`local-family`&&e(t.family)?r(t.family):t.kind===`managed-local`&&M(t.instance)?i(t.instance):t.kind===`provider-runtime`&&M(t.provider)&&M(t.instance)?n(t.provider,t.instance):null:null}function y(e){if(!P(e))return null;let t=x(e.id),n=S(e.family),r=C(e.kind),i=w(e.target);return!t||!n||!r||i===null||!T(e,n,r)?null:b(e,t,n,r,i)}function b(e,t,n,r,i){return Object.freeze({id:t,family:n,...e.appleOs===void 0?{}:{appleOs:e.appleOs},kind:r,...i===void 0?{}:{target:i},...e.iosPhysicalDeviceBackend===void 0?{}:{iosPhysicalDeviceBackend:e.iosPhysicalDeviceBackend}})}function x(e){return M(e)?e:null}function S(t){return e(t)?t:null}function C(e){return A(e)?e:null}function w(e){if(e!==void 0)return j(e)?e:null}function T(e,n,r){if(n===`apple`){if(!t(e.appleOs))return!1}else if(e.appleOs!==void 0||e.iosPhysicalDeviceBackend!==void 0)return!1;return E(e.iosPhysicalDeviceBackend,r)}function E(e,t){return e===void 0?!0:t===`device`?e===`coredevice`||e===`xctest`:!1}function D(e){return!P(e)||!M(e.token)||!N(e.generation)?null:Object.freeze({token:e.token,generation:e.generation})}function O(e){return!P(e)||!N(e.version)||!o(e.body)?null:Object.freeze({version:e.version,body:s(e.body)})}function k(e){return e===`open`||e===`completed`}function A(e){return e===`simulator`||e===`emulator`||e===`device`}function j(e){return e===`mobile`||e===`tv`||e===`desktop`}function M(e){return typeof e==`string`&&e.trim().length>0}function N(e){return typeof e==`number`&&Number.isInteger(e)&&e>=0}function P(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function F(e){return e.status===`cleaned`||e.status===`already-missing`}export{h as a,m as i,g as n,y as r,F as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{N as e,V as t}from"./sdk-contracts.js";const n=new Set([`__proto__`,`constructor`,`prototype`]);async function r(n,r){let o=a(r),c=i(n),{default:l}=await import(`node:vm`),u={...r,output:o};try{l.runInNewContext(c,u,{filename:`evalScript`,timeout:1e4})}catch(n){throw new e(`COMMAND_FAILED`,`Maestro evalScript failed: ${t(n)}`,void 0,n instanceof Error?n:void 0)}return s(u.output)}function i(e){let t=e.trim();return t.startsWith("${")&&t.endsWith(`}`)?t.slice(2,-1):t}function a(e){let t=Object.create(null);for(let[n,r]of Object.entries(e))!n.startsWith(`output.`)||n===`output`||o(t,n.slice(7),r);return t}function o(e,t,n){let r=t.split(`.`).filter(l);if(r.length===0)return;let i=e;for(let e of r.slice(0,-1)){let t=i[e];(typeof t!=`object`||!t)&&(i[e]=Object.create(null)),i=i[e]}i[r.at(-1)]=n}function s(e){let t={};return c(e,[],t,new Set),t}function c(e,t,n,r){if(e!==void 0){if(typeof e!=`object`||!e){n[`output${t.map(e=>`.${e}`).join(``)}`]=u(e);return}if(!r.has(e)){r.add(e);try{let i=Array.isArray(e)?[...e.keys(),`length`]:Object.keys(e).filter(l);for(let a of i){let i=String(a);c(Array.isArray(e)&&i===`length`?e.length:e[i],[...t,i],n,r)}}finally{r.delete(e)}}}}function l(e){return!n.has(e)}function u(e){return typeof e==`string`?e:typeof e==`number`||typeof e==`boolean`?String(e):JSON.stringify(e)}export{r as evaluateMaestroEvalScript};
|
package/dist/src/error.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime.js";import{
|
|
1
|
+
import{r as e}from"./rolldown-runtime.js";import{N as t,X as n,q as r}from"./sdk-contracts.js";import{n as i}from"./success-text.js";import{t as a}from"./output-common.js";import{r as o}from"./replay-divergence.js";var s=e({formatErrorCandidateViews:()=>l,printHumanError:()=>c});function c(e,s={}){let c=e instanceof t?r(e):e;if(process.stderr.write(`Error (${c.code}): ${c.message}\n`),c.cause){let e=c.cause.code?`${c.cause.code} `:``;process.stderr.write(`Cause: ${e}${c.cause.message}\n`)}c.hint&&process.stderr.write(`Hint: ${c.hint}\n`);for(let e of i(c.details))process.stderr.write(`Warning: ${a(e)}\n`);let u=l(n(c.details));u.length>0&&process.stderr.write(`${u.join(`
|
|
2
2
|
`)}\n`),c.diagnosticId&&process.stderr.write(`Diagnostic ID: ${c.diagnosticId}\n`),c.logPath&&process.stderr.write(`Diagnostics Log: ${c.logPath}\n`),c.logPathUnavailable&&process.stderr.write(`Remote Diagnostics: unavailable (${c.logPathUnavailable})\n`);let d=o(c.details);d&&process.stderr.write(`${d}\n`),s.showDetails&&c.details&&process.stderr.write(`${JSON.stringify(c.details,null,2)}\n`)}function l(e){return e.flatMap(e=>{if(e.kind===`element-match`){let t=e.matches-e.candidates.length;return[`Candidates:`,...e.candidates.map(t=>` ${u(t,e.refsGeneration)}`),...t>0?[` +${t} more`]:[]]}return[`Devices:`,...e.devices.map(e=>` ${e.id} ${e.name}`)]})}function u(e,t){return t===void 0?e:e.replace(/^@(e\d+)(?=\s|$)/,`@$1~s${t}`)}export{l as n,s as t};
|
package/dist/src/find.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as e,o as t,y as n}from"./sdk-contracts.js";import{
|
|
1
|
+
import{d as e,o as t,y as n}from"./sdk-contracts.js";import{Fn as r,Nn as i,Pn as a,Rn as o,Rt as s,_t as c}from"./sdk-batch.js";import{c as l}from"./session-store.js";import{c as u}from"./target-evidence.js";import{f as d,m as f,p,u as m}from"./runtime.js";import{r as h,t as g}from"./success-text.js";import{m as _}from"./overlay.js";import{O as v,h as y,v as b}from"./session-snapshot.js";import{t as x}from"./selector-pipeline-policy.js";import{s as S}from"./quality-warnings.js";import{r as C}from"./internal/daemon.js";import{t as w}from"./snapshot-runtime-binding.js";import{l as T,n as E}from"./selector-runtime.js";import{t as D}from"./type-text-runtime.js";function O(e,t){let r=t[0]?.rect;if(!r)return e;let i=e.filter(e=>{if(!e.rect)return!1;let t=n(e.rect);return t.x>=r.x&&t.x<=r.x+r.width&&t.y>=r.y&&t.y<=r.y+r.height}),a=i.length>0?i:e;return a.length<2?a:k(a,t,p(t))}function k(e,t,n){return e.map((e,r)=>({node:e,index:r,score:A(e,t,n)})).sort((e,t)=>t.score===e.score?M(e.node)-M(t.node)||e.index-t.index:t.score-e.score).map(e=>e.node)}function A(e,t,n){let r=n(e);if(r.reason===`covered`)return 0;let i=j(r,t[0]);return i>0?i:e.hittable&&e.rect&&!f(e,t[0])?3:+!!e.rect}function j(e,t){return e.node.rect?e.reason===`semantic-target`||e.reason===`same-rect-descendant`?4:e.reason===`hittable-ancestor`&&!f(e.node,t)?2:0:0}function M(e){return e.rect?e.rect.width*e.rect.height:1/0}function N(e,n,r){let i={matches:e.length,candidates:e.slice(0,5).map(e=>_(e,0,!1))};return t(`AMBIGUOUS_MATCH`,`find matched ${e.length} elements for ${n} "${r}". Use a more specific locator or selector.`,{locator:n,query:r,...i})}function P(e){if(e.ambiguity!==`reject-candidates`)throw Error(`find's resolution policy must reject candidates, got "${e.ambiguity}"`)}function F(e){let{nodes:n,locator:r,query:i,selectorExpression:o,flags:s,platform:c}=e,l=x.findAct,u=n.filter(e=>!f(e,n[0])),d=l.resolution,p;if(p=o?m(l,u,o,{platform:c}).list?.matchedNodes??[]:a(u,r,i,{requireRect:d.requireRect}).matches,p=O(p,n),p.length>1){P(d);let e=I(p,s);if(!e)return{ok:!1,response:N(p,r,i)};p=e}let h=p[0]??null;return h?{ok:!0,node:h}:{ok:!1,response:t(`COMMAND_FAILED`,`find did not match any element`)}}function I(e,t){return t?.findFirst?[e[0]]:t?.findLast?[e.at(-1)]:null}function L(e){let{device:t,session:n,req:r,logPath:i,locator:a,query:o,sessionStore:s,sessionName:c}=e,l=T({device:t,session:n,sessionStore:s,sessionName:c,req:r,logPath:i,capture:e.capture,captureProof:e.captureProof});return async()=>{let{snapshot:e}=await l.capture({flags:{...r.flags,snapshotInteractiveOnly:!0},recovery:{legacyIosSparse:{query:o,shouldScope:z(a)},sparseVerdictQueryScope:{query:o,shouldScope:z(a)}}});return e}}function R(e){return t(`COMMAND_FAILED`,`find could not read the current accessibility tree`,{reason:e.reason,hint:`The snapshot quality verdict is sparse. Use screenshot as visual truth, navigate with coordinates if needed, then retry find after reaching a readable screen.`})}function z(e){return e!==`role`}async function B(n){let{req:a,sessionName:l,logPath:f,sessionStore:p,invoke:m}=n,h=a.command;if(h!==`find`)return null;let g=a.positionals??[],_=i(g,a.flags);if(!_.ok)return t(_.code,_.message);let{locator:v,query:y,action:b,value:C}=_.parsed;if(a.flags?.record&&!r(b))return t(`INVALID_ARGS`,`find ${b} is a mutating action and is always recorded; --record only applies to a read-only find (exists, wait, list, get text, get attrs).`);let T=await E({req:a,sessionName:l,logPath:f,sessionStore:p,inspectFacts:n.inspectFacts,bindDevice:n.bindDevice});if(T)return T;let D=p.get(l);if(!D)return e();let O=D.device,k=await w({command:`find`,device:O,session:D,plan:s({hasActiveApp:D.appBundleId!==void 0,intent:c(b)}),inspectFacts:n.inspectFacts,bindDevice:n.bindDevice});if(!k.ok)return k.response;let A=o(v,y),j={},M=L({device:O,session:D,req:a,logPath:f,locator:v,query:y,sessionStore:p,sessionName:l,capture:k.capture,captureProof:j}),N={req:a,sessionName:l,logPath:f,sessionStore:p,invoke:m,session:D,device:O,command:h,locator:v,query:y,publicFlags:X(a.flags),boundFocusPoint:k.focusPoint,boundTypeText:k.typeText},P=await M();if(S(P.snapshotQuality))return u({response:R(P.snapshotQuality),consumedTree:P,captureProof:j});let{nodes:I}=P,z=F({nodes:I,locator:v,query:y,selectorExpression:A,flags:a.flags,platform:O.platform});if(!z.ok)return u({response:z.response,consumedTree:P,captureProof:j});let B=z.node,H=await d(x.findAct,I,B),U=H.node,W=`@${U.ref}`,G={...a.flags??{},noRecord:!0},K=await V(N,{node:B,resolvedNode:U,ref:W,nodes:I,...P.iosSystemSurfaceBundleId?{iosSystemSurfaceBundleId:P.iosSystemSurfaceBundleId}:{},...P.keyboard?{keyboard:P.keyboard}:{},actionFlags:G,...H.kind===`occluded`?{occludedNode:H.node}:{}},b,C);return K&&u({response:K,consumedTree:P,captureProof:j})}async function V(e,t,n,r){let i={click:()=>U(e,t),fill:()=>W(e,t,r),focus:()=>G(e,t),type:()=>K(e,t,r)}[n];return i?await i():null}function H(e){return{ref:e.ref,node:e.resolvedNode,nodes:e.nodes,...e.iosSystemSurfaceBundleId?{iosSystemSurfaceBundleId:e.iosSystemSurfaceBundleId}:{},...e.keyboard?{keyboard:e.keyboard}:{}}}async function U(e,t){let{req:r,sessionName:i,sessionStore:a,session:o,invoke:s,command:c,locator:u,query:d,publicFlags:f}=e,p=await s({token:r.token,session:i,command:`click`,positionals:[t.ref],flags:t.actionFlags,internal:{findResolvedTarget:H(t)}});if(!p.ok)return p;let m=t.resolvedNode.rect?n(t.resolvedNode.rect):t.node.rect?n(t.node.rect):null,_={ref:t.ref,locator:u,query:d};m&&(_.x=m.x,_.y=m.y);let v=g(p.data)??`Tapped ${t.ref}${m?` (${m.x}, ${m.y})`:``}`;return Object.assign(_,h(v)),l(a,o,r,c,{ref:t.ref,action:`click`,locator:u,query:d},{flags:f}),{ok:!0,data:_}}async function W(e,n,r){let{req:i,sessionName:a,sessionStore:o,session:s,invoke:c,command:u,publicFlags:d}=e;if(r===void 0)return t(`INVALID_ARGS`,`find fill requires text (use "" to clear the field)`);let f=await c({token:i.token,session:a,command:`fill`,positionals:[n.ref,r],flags:n.actionFlags,internal:{findResolvedTarget:H(n)}});return f.ok&&l(o,s,i,u,{ref:n.ref,action:`fill`},{flags:d}),f}async function G(e,t){let n=await q(e,t);return n.ok&&Y(e,t,`focus`),n}async function K(e,n,r){let{req:i,logPath:a,session:o}=e;if(!r)return t(`INVALID_ARGS`,`find type requires text`);let s=await q(e,n);if(!s.ok)return s;v(o);let c=e.boundTypeText;if(!c)return t(`COMMAND_FAILED`,`find type was admitted without a text-entry operation`);let l=await D({operations:{typeText:c}},[r],y(a,i.flags,o.appBundleId,o.trace?.outPath));return Y(e,n,`type`),{ok:!0,data:l??{ref:n.ref}}}async function q(e,r){let{req:i,logPath:a,session:o}=e,s=J(r,`be focused`);if(s)return s;let c=r.resolvedNode.rect?n(r.resolvedNode.rect):null;if(!c)return t(`COMMAND_FAILED`,`matched element has no bounds`);v(o);let l=e.boundFocusPoint;return l?{ok:!0,data:await C({operations:{focusPoint:l}},c,y(a,i.flags,o.appBundleId,o.trace?.outPath))??{ref:r.ref}}:t(`COMMAND_FAILED`,`find focus was admitted without a focus operation`)}function J(e,n){let r=e.occludedNode;return r?t(`COMMAND_FAILED`,`Matched element ${e.ref} is covered by another visible element and cannot ${n} safely`,{ref:`@${r.ref}`,interactionBlocked:r.interactionBlocked,hint:`Use a different visible target, scroll it clear of the overlay, or inspect with snapshot/screenshot before retrying.`}):null}function Y(e,t,n){let{req:r,sessionStore:i,session:a,command:o,publicFlags:s}=e;l(i,a,r,o,{ref:t.ref,action:n},{flags:s})}function X(e){return{...b(e)??{}}}export{B as handleFindCommands};
|
package/dist/src/finders.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{Ln as e}from"./sdk-batch.js";import{t}from"./sdk-finders.js";export{t as findBestMatchesByLocator,e as parseFindArgs};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{m as e}from"./sdk-batch.js";import{t}from"./session-snapshot.js";import{i as n,r}from"./interaction-ref-policy.js";import{captureSnapshotForSession as i,createInteractionRuntime as a}from"./interaction.js";function o(t){if(!e(t.command))return{};let i=n(t.command,t.flags);if(i)return{response:i};let a=r(t.flags);if(!a)return{};let o=t.session.snapshot,c={nodes:o?.nodes??[],...o?.iosSystemSurfaceBundleId?{surfaceBundleId:o.iosSystemSurfaceBundleId}:{}};return{observe:async()=>await s(t,a,c)}}async function s(e,n,r){let i=c(e);if(!i)return;let a=await i.interactions.settleObservation({...n,baseline:r,session:e.sessionName,requestId:e.req.meta?.requestId}),o=t(e.session,a);return o===void 0?a:{...a,refsGeneration:o}}function c(e){try{return a({req:e.req,sessionName:e.sessionName,logPath:e.logPath,sessionStore:e.sessionStore,contextFromFlags:e.contextFromFlags,captureSnapshotForSession:i})}catch{return}}export{o as planGenericSettleObservation};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{N as e,
|
|
1
|
+
import{N as e,q as t}from"./sdk-contracts.js";import{Ft as n,bt as r}from"./sdk-batch.js";import{f as i}from"./session-snapshot.js";import{n as a,t as o}from"./runtime-admission.js";import{a as s}from"./gesture-admission.js";async function c(e){let t=await a({command:`runtime gesture-viewport`,device:e.device,use:r,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});return t.type===`response`?{ok:!1,response:t.response}:{ok:!0,read:d(t.runtime).gestureViewport}}async function l(r){let i=n(r.input),a=await o({command:`gesture`,device:r.device,required:i.use.required,inspectFacts:r.inspectFacts,bindDevice:r.bindDevice,unavailableResponse:n=>({ok:!1,error:t(new e(`UNSUPPORTED_OPERATION`,s(r.device,i.tier,r.input.intent),{gesture:r.input.intent,...n.hint===void 0?{}:{hint:n.hint}}))})});return a.type===`response`?{ok:!1,response:a.response}:{ok:!0,gestures:await u(a.bind,r.device,i)}}async function u(e,t,n){switch(n.tier){case`plan`:{let r=await e(t,n.use);return{performPlan:async(e,t)=>await r.operations.performGesturePlan(f(e,t)),...d(r)}}case`directional-fling`:{let r=await e(t,n.use);return{performPlan:async(e,t)=>await r.operations.performDirectionalFlingPlan(f(e,t)),...d(r)}}case`multi-touch`:{let r=await e(t,n.use);return{performPlan:async(e,t)=>await r.operations.performMultiTouchGesturePlan(f(e,t)),...d(r)}}case`target-authored-drag`:{let r=await e(t,n.use);return{performPlan:async(e,t)=>await r.operations.performTargetAuthoredDrag(f(e,t)),...d(r)}}}}function d(e){let{gestureViewport:t}=e.operations,n=e.operations.captureSnapshot?{operations:{captureSnapshot:e.operations.captureSnapshot}}:void 0,r=t?{operations:{gestureViewport:t}}:void 0;return Object.freeze({...n?{captureSnapshot:async e=>await n.operations.captureSnapshot(e)}:{},...r?{gestureViewport:async e=>await r.operations.gestureViewport(p(e))}:{}})}function f(e,t){return{plan:e,...t.appBundleId===void 0?{}:{options:{appBundleId:t.appBundleId}},execution:i(t)}}function p(e){return{...e.appBundleId===void 0?{}:{options:{appBundleId:e.appBundleId}},execution:i(e)}}export{c as n,l as t};
|
package/dist/src/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { A as Rect, H as AppError, J as NormalizedError, K as ErrorCause, O as Point, P as SnapshotNode, R as SnapshotState, U as AppErrorCode, V as centerOfRect, W as AppErrorDetails, X as isAgentDeviceError, Z as normalizeAgentDeviceError, k as RawSnapshotNode, q as KnownAppErrorCode, y as AppleOS } from "./sdk-contracts.js";
|
|
2
2
|
import { s as AppsFilter } from "./gesture-plan-types.js";
|
|
3
|
-
import { $ as NetworkOptions, $t as
|
|
3
|
+
import { $ as NetworkOptions, $t as AppTriggerEventOptions, A as WaitCommandOptions, At as ElementTarget, B as GetOptions, Bt as FindSnapshotCommandOptions, C as HomeCommandOptions, Cn as isRecord, Ct as RotateGestureOptions, D as ReactNativeCommandOptions, Dt as SwipeOptions, E as PrepareCommandOptions, Et as SwipeGestureOptions, F as SessionCloseResult, Ft as CaptureDiffOptions, G as CommandRequestResult, Gt as AppDeployResult, H as IsStatePredicateOptions, Ht as AppCloseOptions, I as SessionSaveScriptOptions, It as CaptureScreenshotOptions, J as ReplayRunOptions, Jt as AppInstallOptions, K as BatchRunOptions, Kt as AppInstallFromSourceOptions, L as SessionSaveScriptResult, Lt as CaptureScreenshotResult, M as AlertAction, Mt as PointTarget, N as PermissionTarget, Nt as RefTarget, O as TvRemoteCommandOptions, Ot as TransformGestureOptions, P as SettingsUpdateOptions, Pt as SelectorTarget, Q as LogsOptions, Qt as AppPushOptions, R as FindBaseOptions, Rt as CaptureSnapshotOptions, S as FoldCommandOptions, Sn as JsonValue, St as RepeatedPressOptions, T as OrientationCommandOptions, Tt as SettleCommandOptions, U as IsTextPredicateOptions, Ut as AppCloseResult, V as IsOptions, Vt as SelectorSnapshotCommandOptions, W as RecordControlOptions, Wt as AppDeployOptions, X as AudioOptions, Xt as AppOpenOptions, Y as ReplayTestOptions, Yt as AppListOptions, Z as EventsOptions, Zt as AppOpenResult, _ as AppStateCommandOptions, _n as AgentDeviceSelectionOptions, _t as LongPressOptions, a as WaitCommandResult, an as AgentDeviceCapabilitiesResult, at as HumanControlHoldOptions, b as ClipboardCommandOptions, bn as JsonObject, bt as PressOptions, c as DebugSymbolsOptions, cn as AgentDeviceSessionDevice, ct as LeaseAllocateOptions, d as PrepareCommandResult, dn as StartupPerfSample, dt as ClickOptions, en as DeviceSelectionMetadata, et as PerfOptions, f as ReplayCommandResult, fn as AgentDeviceClientConfig, ft as DragOptions, g as AlertCommandOptions, gn as AgentDeviceRequestOverrides, gt as HoverOptions, h as ActionButtonCommandOptions, hn as AgentDeviceIdentifiers, ht as FocusOptions, i as TraceCommandResult, in as MaterializationReleaseResult, it as HumanControlHold, j as WaitCommandTarget, jt as InteractionTarget, k as ViewportCommandOptions, kt as TypeTextOptions, l as DebugSymbolsResult, ln as DeviceBootOptions, lt as LeaseOptions, m as TriggerAppEventCommandResult, mn as AgentDeviceDaemonTransportContext, mt as FlingOptions, n as AgentDeviceCommandClient, nn as DeviceSelectionSource, nt as TraceOptions, o as DiffSnapshotCommandResult, on as AgentDeviceDevice, ot as HumanControlHoldScope, p as ReplaySuiteResult, pn as AgentDeviceDaemonTransport, pt as FillOptions, q as BatchStep, qt as AppInstallFromSourceResult, r as RecordingCommandResult, rn as MaterializationReleaseOptions, rt as CloudArtifactsOptions, s as DoctorCommandResult, sn as AgentDeviceSession, st as Lease, t as AgentDeviceClient, tn as DeviceSelectionReason, tt as RecordOptions, u as PushCommandResult, un as DeviceShutdownOptions, ut as LeaseScopedOptions, v as AppSwitcherCommandOptions, vn as DeviceCommandBaseOptions, vt as PanOptions, w as KeyboardCommandOptions, wt as ScrollOptions, x as DoctorCommandOptions, xn as JsonPrimitive, xt as ReadinessBudgetOptions, y as BackCommandOptions, yn as TargetShutdownResult, yt as PinchOptions, z as FindOptions, zt as CaptureSnapshotResult } from "./client-types.js";
|
|
4
4
|
import { _ as AgentArtifactsResult, y as CloudProviderSessionResult } from "./scroll-command.js";
|
|
5
5
|
import { c as MetroPrepareResult, l as MetroReloadOptions, p as MetroBridgeScope, s as MetroPrepareOptions, u as MetroReloadResult } from "./sdk-remote-config.js";
|
|
6
6
|
import { t as BatchRunResult } from "./sdk-batch-runner.js";
|
|
@@ -10,4 +10,4 @@ declare function createAgentDeviceClient(config?: AgentDeviceClientConfig, deps?
|
|
|
10
10
|
transport?: AgentDeviceDaemonTransport;
|
|
11
11
|
}): AgentDeviceClient;
|
|
12
12
|
//#endregion
|
|
13
|
-
export { type ActionButtonCommandOptions, type AgentArtifactsResult, type AgentDeviceCapabilitiesResult, type AgentDeviceClient, type AgentDeviceClientConfig, type AgentDeviceCommandClient, type AgentDeviceDaemonTransport, type AgentDeviceDaemonTransportContext, type AgentDeviceDevice, type AgentDeviceIdentifiers, type AgentDeviceRequestOverrides, type AgentDeviceSelectionOptions, type AgentDeviceSession, type AgentDeviceSessionDevice, type AlertAction, type AlertCommandOptions, type AppCloseOptions, type AppCloseResult, type AppDeployOptions, type AppDeployResult, AppError, type AppErrorCode, type AppErrorDetails, type AppInstallFromSourceOptions, type AppInstallFromSourceResult, type AppInstallOptions, type AppListOptions, type AppOpenOptions, type AppOpenResult, type AppPushOptions, type AppStateCommandOptions, type AppSwitcherCommandOptions, type AppTriggerEventOptions, type AppleOS, type AppsFilter, type AudioOptions, type BackCommandOptions, type BatchRunOptions, type BatchRunResult, type BatchStep, type CaptureDiffOptions, type CaptureScreenshotOptions, type CaptureScreenshotResult, type CaptureSnapshotOptions, type CaptureSnapshotResult, type ClickOptions, type ClipboardCommandOptions, type CloudArtifactsOptions, type CloudProviderSessionResult, type CommandRequestResult, type DebugSymbolsOptions, type DebugSymbolsResult, type DeviceBootOptions, type DeviceCommandBaseOptions, type DeviceSelectionMetadata, type DeviceSelectionReason, type DeviceSelectionSource, type DeviceShutdownOptions, type DiffSnapshotCommandResult, type DoctorCommandOptions, type DoctorCommandResult, type DragOptions, type ElementTarget, type ErrorCause, type EventsOptions, type FillOptions, type FindBaseOptions, type FindOptions, type FindSnapshotCommandOptions, type FlingOptions, type FocusOptions, type FoldCommandOptions, type GetOptions, type HomeCommandOptions, type HoverOptions, type HumanControlHold, type HumanControlHoldOptions, type HumanControlHoldScope, type InteractionTarget, type IsOptions, type IsStatePredicateOptions, type IsTextPredicateOptions, type JsonObject, type JsonPrimitive, type JsonValue, type KeyboardCommandOptions, type KnownAppErrorCode, type Lease, type LeaseAllocateOptions, type LeaseOptions, type LeaseScopedOptions, type LogsOptions, type LongPressOptions, type MaterializationReleaseOptions, type MaterializationReleaseResult, type MetroBridgeScope, type MetroPrepareOptions, type MetroPrepareResult, type MetroReloadOptions, type MetroReloadResult, type NetworkOptions, type NormalizedError, type OrientationCommandOptions, type PanOptions, type PerfOptions, type PermissionTarget, type PinchOptions, type Point, type PointTarget, type PrepareCommandOptions, type PrepareCommandResult, type PressOptions, type PushCommandResult, type RawSnapshotNode, type ReactNativeCommandOptions, type RecordControlOptions, type RecordOptions, type RecordingCommandResult, type Rect, type RefTarget, type RepeatedPressOptions, type ReplayCommandResult, type ReplayRunOptions, type ReplaySuiteResult, type ReplayTestOptions, type RotateGestureOptions, type ScrollOptions, type SelectorSnapshotCommandOptions, type SelectorTarget, type SessionCloseResult, type SessionSaveScriptOptions, type SessionSaveScriptResult, type SettingsUpdateOptions, type SettleCommandOptions, type SnapshotNode, type SnapshotState, type StartupPerfSample, type SwipeGestureOptions, type SwipeOptions, type TargetShutdownResult, type TraceCommandResult, type TraceOptions, type TransformGestureOptions, type TriggerAppEventCommandResult, type TvRemoteCommandOptions, type TypeTextOptions, type ViewportCommandOptions, type WaitCommandOptions, type WaitCommandResult, type WaitCommandTarget, centerOfRect, createAgentDeviceClient, createLocalArtifactAdapter, isAgentDeviceError, type isRecord, normalizeAgentDeviceError };
|
|
13
|
+
export { type ActionButtonCommandOptions, type AgentArtifactsResult, type AgentDeviceCapabilitiesResult, type AgentDeviceClient, type AgentDeviceClientConfig, type AgentDeviceCommandClient, type AgentDeviceDaemonTransport, type AgentDeviceDaemonTransportContext, type AgentDeviceDevice, type AgentDeviceIdentifiers, type AgentDeviceRequestOverrides, type AgentDeviceSelectionOptions, type AgentDeviceSession, type AgentDeviceSessionDevice, type AlertAction, type AlertCommandOptions, type AppCloseOptions, type AppCloseResult, type AppDeployOptions, type AppDeployResult, AppError, type AppErrorCode, type AppErrorDetails, type AppInstallFromSourceOptions, type AppInstallFromSourceResult, type AppInstallOptions, type AppListOptions, type AppOpenOptions, type AppOpenResult, type AppPushOptions, type AppStateCommandOptions, type AppSwitcherCommandOptions, type AppTriggerEventOptions, type AppleOS, type AppsFilter, type AudioOptions, type BackCommandOptions, type BatchRunOptions, type BatchRunResult, type BatchStep, type CaptureDiffOptions, type CaptureScreenshotOptions, type CaptureScreenshotResult, type CaptureSnapshotOptions, type CaptureSnapshotResult, type ClickOptions, type ClipboardCommandOptions, type CloudArtifactsOptions, type CloudProviderSessionResult, type CommandRequestResult, type DebugSymbolsOptions, type DebugSymbolsResult, type DeviceBootOptions, type DeviceCommandBaseOptions, type DeviceSelectionMetadata, type DeviceSelectionReason, type DeviceSelectionSource, type DeviceShutdownOptions, type DiffSnapshotCommandResult, type DoctorCommandOptions, type DoctorCommandResult, type DragOptions, type ElementTarget, type ErrorCause, type EventsOptions, type FillOptions, type FindBaseOptions, type FindOptions, type FindSnapshotCommandOptions, type FlingOptions, type FocusOptions, type FoldCommandOptions, type GetOptions, type HomeCommandOptions, type HoverOptions, type HumanControlHold, type HumanControlHoldOptions, type HumanControlHoldScope, type InteractionTarget, type IsOptions, type IsStatePredicateOptions, type IsTextPredicateOptions, type JsonObject, type JsonPrimitive, type JsonValue, type KeyboardCommandOptions, type KnownAppErrorCode, type Lease, type LeaseAllocateOptions, type LeaseOptions, type LeaseScopedOptions, type LogsOptions, type LongPressOptions, type MaterializationReleaseOptions, type MaterializationReleaseResult, type MetroBridgeScope, type MetroPrepareOptions, type MetroPrepareResult, type MetroReloadOptions, type MetroReloadResult, type NetworkOptions, type NormalizedError, type OrientationCommandOptions, type PanOptions, type PerfOptions, type PermissionTarget, type PinchOptions, type Point, type PointTarget, type PrepareCommandOptions, type PrepareCommandResult, type PressOptions, type PushCommandResult, type RawSnapshotNode, type ReactNativeCommandOptions, type ReadinessBudgetOptions, type RecordControlOptions, type RecordOptions, type RecordingCommandResult, type Rect, type RefTarget, type RepeatedPressOptions, type ReplayCommandResult, type ReplayRunOptions, type ReplaySuiteResult, type ReplayTestOptions, type RotateGestureOptions, type ScrollOptions, type SelectorSnapshotCommandOptions, type SelectorTarget, type SessionCloseResult, type SessionSaveScriptOptions, type SessionSaveScriptResult, type SettingsUpdateOptions, type SettleCommandOptions, type SnapshotNode, type SnapshotState, type StartupPerfSample, type SwipeGestureOptions, type SwipeOptions, type TargetShutdownResult, type TraceCommandResult, type TraceOptions, type TransformGestureOptions, type TriggerAppEventCommandResult, type TvRemoteCommandOptions, type TypeTextOptions, type ViewportCommandOptions, type WaitCommandOptions, type WaitCommandResult, type WaitCommandTarget, centerOfRect, createAgentDeviceClient, createLocalArtifactAdapter, isAgentDeviceError, type isRecord, normalizeAgentDeviceError };
|
package/dist/src/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{K as e,N as t,U as n,y as r}from"./sdk-contracts.js";import{n as i}from"./agent-device-client.js";import{t as a}from"./sdk-io.js";export{t as AppError,r as centerOfRect,i as createAgentDeviceClient,a as createLocalArtifactAdapter,n as isAgentDeviceError,e as normalizeAgentDeviceError};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{N as e}from"./sdk-contracts.js";import{t}from"./scroll-gesture.js";import{c as
|
|
2
|
-
`).map(e=>e.trim().split(`=`)).filter(e=>e.length===2).map(([e,t])=>[e,Number(t)]));return r.get(`X`)===Math.round(e)&&r.get(`Y`)===Math.round(t)}catch{return!1}}async function
|
|
1
|
+
import{N as e,z as t}from"./sdk-contracts.js";import{t as n}from"./scroll-gesture.js";import{c as r}from"./owner-identity.js";import{t as i}from"./timeouts.js";import"./process.js";import"./retry.js";import{t as a}from"./tool-provider2.js";function o(){let e=r();return e.WAYLAND_DISPLAY||e.XDG_SESSION_TYPE===`wayland`?`wayland`:`x11`}let s=null;async function c(){let t=a();if(s?.provider===t)return s;let n=o();if(n===`wayland`){if(await t.whichCommand(`ydotool`))return s={tool:`ydotool`,display:n,provider:t},s;throw new e(`TOOL_MISSING`,`ydotool is required for input synthesis on Wayland (xdotool does not work on Wayland). Install it via your package manager.`)}if(await t.whichCommand(`xdotool`))return s={tool:`xdotool`,display:n,provider:t},s;throw new e(`TOOL_MISSING`,`xdotool is required for input synthesis on X11. Install it via your package manager.`)}const l=1e4;async function u(...e){await a().runCommand(`xdotool`,e,{allowFailure:!1,timeoutMs:l})}async function d(...e){await a().runCommand(`ydotool`,e,{allowFailure:!1,timeoutMs:l})}function f(){return a().input}async function p(e,t){let{tool:n}=await c();if(n===`xdotool`){if(await m(e,t))return;await u(`mousemove`,`--sync`,String(e),String(t))}else await d(`mousemove`,`--absolute`,`-x`,String(e),`-y`,String(t))}async function m(e,t){try{let n=await a().runCommand(`xdotool`,[`getmouselocation`,`--shell`],{allowFailure:!0,timeoutMs:l}),r=new Map(n.stdout.split(`
|
|
2
|
+
`).map(e=>e.trim().split(`=`)).filter(e=>e.length===2).map(([e,t])=>[e,Number(t)]));return r.get(`X`)===Math.round(e)&&r.get(`Y`)===Math.round(t)}catch{return!1}}async function h(e,t){let n=f();if(n){await n.key(e,t);return}let{tool:r}=await c();r===`xdotool`?await u(`key`,`--clearmodifiers`,e):await d(`key`,...t)}async function g(e,t,n,r){await p(e,t);let{tool:i}=await c();i===`xdotool`?await u(`click`,n):await d(`click`,r)}async function _(e,t,n,r,i){let a=f();if(a){await a.click(e,t,n);return}await g(e,t,r,i)}async function v(e,t){await _(e,t,`primary`,`1`,`0xC0`)}async function y(e,t){await _(e,t,`secondary`,`3`,`0xC1`)}async function b(e,t){await _(e,t,`middle`,`2`,`0xC2`)}async function x(e,t){let n=f();if(n){await n.doubleClick(e,t);return}let{tool:r}=await c();await p(e,t),r===`xdotool`?await u(`click`,`--repeat`,`2`,`1`):(await d(`click`,`0xC0`),await d(`click`,`0xC0`))}async function S(e,t,n=800){let r=f();if(r){await r.longPress(e,t,n);return}let{tool:a}=await c();await p(e,t),a===`xdotool`?(await u(`mousedown`,`1`),await i(n),await u(`mouseup`,`1`)):(await d(`click`,`--down`,`0xC0`),await i(n),await d(`click`,`--up`,`0xC0`))}async function C(e,t){await v(e,t)}async function w(e,t,n,r,a=300){let o=f();if(o){await o.drag(e,t,n,r,a);return}let{tool:s}=await c();await p(e,t),s===`xdotool`?(await u(`mousedown`,`1`),await u(`mousemove`,`--sync`,String(n),String(r)),await i(a),await u(`mouseup`,`1`)):(await d(`click`,`--down`,`0xC0`),await d(`mousemove`,`--absolute`,`-x`,String(n),`-y`,String(r)),await i(a),await d(`click`,`--up`,`0xC0`))}async function T(e,t){let r=f();if(r)return await r.scroll(e,t),D(t);let{tool:i}=await c(),a=5;if(t?.pixels==null?t?.amount!=null&&(a=Math.max(1,Math.round(5*(t.amount/n)))):a=i===`xdotool`?Math.max(1,Math.round(t.pixels/15)):Math.max(1,Math.round(t.pixels/40)),i===`xdotool`){let n=e===`up`?`4`:e===`down`?`5`:e===`left`?`6`:`7`;await E(a,t?.durationMs,async e=>{await u(`click`,`--repeat`,String(e),n)})}else e===`up`||e===`down`?await E(a,t?.durationMs,async t=>{await d(`mousemove`,`--wheel`,`-y`,String(e===`up`?-t:t))}):await E(a,t?.durationMs,async t=>{await d(`mousemove`,`--wheel`,`-x`,String(e===`left`?-t:t))});return D(t)}async function E(e,n,r){if(n===void 0||n<=0||e<=1){await r(e);return}let a=n/Math.max(1,e-1),o=0;try{for(let t=0;t<e;t+=1)await r(1),o+=1,t<e-1&&await i(a)}catch(e){throw t(e,o)}}function D(e){return e?.durationMs===void 0?{}:{durationMs:e.durationMs}}async function O(e,t=0){let n=f();if(n){await n.typeText(e,{delayMs:t});return}let{tool:r}=await c();if(r===`xdotool`){let n=[`type`];t>0&&n.push(`--delay`,String(t)),n.push(`--clearmodifiers`,`--`,e),await u(...n)}else await d(`type`,`--`,e)}async function k(e,t,n,r=0){if(await v(e,t),await i(100),await h(`ctrl+a`,[`29:1`,`30:1`,`30:0`,`29:0`]),await i(50),n.length===0){await h(`BackSpace`,[`14:1`,`14:0`]);return}await O(n,r)}export{x as doubleClickLinux,k as fillLinux,C as focusLinux,S as longPressLinux,b as middleClickLinux,v as pressLinux,y as rightClickLinux,T as scrollLinux,h as sendKey,w as swipeLinux,O as typeLinux};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e,t}from"./rolldown-runtime.js";import{F as n,N as r,V 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 n=h(e.hostname);p(n)&&_(e.hostname);let a=o.isIP(n);if(a)return{address:n,family:a};let s;try{s=await u(n,t)}catch(e){throw i(e)?e:new r(`INVALID_ARGS`,`Source URL host could not be resolved: ${n}`,{hint:`Use a public artifact URL.`},e)}if(s.length===0)throw new r(`INVALID_ARGS`,`Source URL host could not be resolved: ${n}`,{hint:`Use a public artifact URL.`});s.some(e=>m(e.address))&&_(n);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 n(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)=>{if(r.all){i(null,[{address:e,family:t}]);return}i(null,e,t)}}})}function C(e,t){let n=o.isIP(E(t.hostname))!==0;return new v.ProxyAgent({uri:e,proxyTunnel:!0,requestTls:t.protocol===`https:`&&!n?{servername:E(t.hostname)}:void 0})}function w(e,t,n){let r=new URL(e);return r.hostname=n===6?`[${E(t)}]`:t,r}function T(e){if(e.startsWith(`[`)){let t=e.indexOf(`]`);return t<0?{hostname:e}:{hostname:e.slice(1,t),port:e[t+1]===`:`?e.slice(t+2):void 0}}let t=e.lastIndexOf(`:`);return t>-1&&e.indexOf(`:`)===t?{hostname:e.slice(0,t),port:e.slice(t+1)}:{hostname:e}}function E(e){return e.startsWith(`[`)&&e.endsWith(`]`)?e.slice(1,-1):e}async function D(e){await e.close()}export{b as n,l as r,y as t};
|
|
1
|
+
import{a as e,t}from"./rolldown-runtime.js";import{F as n,G as r,N 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 i(`INVALID_ARGS`,`Unsupported source URL protocol: ${e.protocol}`);if(e.username||e.password)throw new i(`INVALID_ARGS`,`Source URL credentials are not allowed`);d(t);let n=h(e.hostname);p(n)&&_(e.hostname);let a=o.isIP(n);if(a)return{address:n,family:a};let s;try{s=await u(n,t)}catch(e){throw r(e)?e:new i(`INVALID_ARGS`,`Source URL host could not be resolved: ${n}`,{hint:`Use a public artifact URL.`},e)}if(s.length===0)throw new i(`INVALID_ARGS`,`Source URL host could not be resolved: ${n}`,{hint:`Use a public artifact URL.`});s.some(e=>m(e.address))&&_(n);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 n(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 i(`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 i(`INVALID_ARGS`,`Source URL host is not allowed because it resolves to a non-public address: ${e}`,{hint:`Use a public artifact URL.`})}var v=a();async function y(e){let t=b(e.url),n=t?C(t,e.url):S(e.approvedAddress,e.family),r=t?w(e.url,e.approvedAddress,e.family):e.url;try{let i={dispatcher:n,headers:t?{...e.headers,host:e.url.host}:e.headers,maxRedirections:0,method:`GET`,signal:e.signal},a=await(0,v.request)(r,i);return{statusCode:a.statusCode,headers:a.headers,body:a.body,close:async()=>await D(n)}}catch(e){throw await D(n),e}}function b(e,t=process.env){if(x(e,t.no_proxy??t.NO_PROXY))return;let n=t.http_proxy??t.HTTP_PROXY;return e.protocol===`http:`?n||void 0:(t.https_proxy??t.HTTPS_PROXY)||n||void 0}function x(e,t){if(!t)return!1;let n=E(e.hostname).toLowerCase(),r=e.port||(e.protocol===`https:`?`443`:`80`);return t.split(/[\s,]+/).filter(Boolean).some(e=>{if(e===`*`)return!0;let t=T(e);if(t.port&&t.port!==r)return!1;let i=t.hostname.replace(/^\*?\./,``).toLowerCase();return n===i||n.endsWith(`.${i}`)})}function S(e,t){return new v.Agent({connect:{lookup:(n,r,i)=>{if(r.all){i(null,[{address:e,family:t}]);return}i(null,e,t)}}})}function C(e,t){let n=o.isIP(E(t.hostname))!==0;return new v.ProxyAgent({uri:e,proxyTunnel:!0,requestTls:t.protocol===`https:`&&!n?{servername:E(t.hostname)}:void 0})}function w(e,t,n){let r=new URL(e);return r.hostname=n===6?`[${E(t)}]`:t,r}function T(e){if(e.startsWith(`[`)){let t=e.indexOf(`]`);return t<0?{hostname:e}:{hostname:e.slice(1,t),port:e[t+1]===`:`?e.slice(t+2):void 0}}let t=e.lastIndexOf(`:`);return t>-1&&e.indexOf(`:`)===t?{hostname:e.slice(0,t),port:e.slice(t+1)}:{hostname:e}}function E(e){return e.startsWith(`[`)&&e.endsWith(`]`)?e.slice(1,-1):e}async function D(e){await e.close()}export{b as n,l as r,y as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{N as e}from"./sdk-contracts.js";import{
|
|
1
|
+
import{N as e}from"./sdk-contracts.js";import{Cr as t,br as n,vr as r,xr as i,yr as a}from"./sdk-batch.js";function o(e){return e?.startsWith(`@`)?e.slice(1):e}const s=/^e\d+$/;function c(n){if(n[0]?.startsWith(`@`)){let e=_(n.slice(1));return{ref:n[0],...e===void 0?{}:{label:e}}}if(s.test(n[0]??``))throw new e(`INVALID_ARGS`,`Did you mean "@${n[0]}"? Snapshot refs need the @ prefix.`);let r=t(n);if(r){if(r.rest.length>0)throw new e(`INVALID_ARGS`,m(n,r));return{selector:r.selectorExpression}}return u(n)}function l(n){let r=n[0];if(r?.startsWith(`@`)){let e=n.slice(1),t=e.length===0?void 0:e.join(` `);return{kind:`ref`,target:{ref:r},text:t}}if(s.test(r??``))throw new e(`INVALID_ARGS`,`Did you mean "@${r}"? Snapshot refs need the @ prefix.`);let i=t(n,{preferTrailingValue:!0});if(i)return{kind:`selector`,target:{selector:i.selectorExpression},text:i.rest.length===0?void 0:i.rest.join(` `)};let a=n.slice(2);return{kind:`point`,target:u(n.slice(0,2)),text:a.length===0?void 0:a.join(` `)}}function u(t){let n=t[0]??``,r=a(n);if(r){let i=d(n)?r.value:[r.value,...t.slice(1)].join(` `).trim();throw new e(`INVALID_ARGS`,f({key:r.key,value:i}))}let i=Number(t[0]),o=Number(t[1]);if(Number.isFinite(i)&&Number.isFinite(o))return{x:i,y:o};throw new e(`INVALID_ARGS`,p(t))}function d(e){let t=e.slice(e.indexOf(`=`)+1).trim();if(t.length<2)return!1;let n=t[0];return(n===`"`||n===`'`)&&t.endsWith(n)}function f(e){let{key:t,value:i}=e;return`Unknown selector key "${t}". Supported: ${r.join(`, `)}. ${n(t)?`Did you mean role=${t} label=${g(i)}?`:`Did you mean label=${g(i)}?`}`}function p(e){let t=e.filter(e=>e!==void 0).join(` `);if(!t.trim())return`Missing target. Pass an @ref from snapshot, a selector like text="Sign in", or "x y" coordinates.`;let n=`Target "${t}" is not a @ref, selector, or "x y" point.`;return e.some(e=>i(e??``))?`${n} Selector values with spaces need quotes, e.g. text="Sign in".`:`${n} To match by visible text, use text=${g(t)} (or label=/id=/role=), or pass an @ref from snapshot.`}function m(e,t){return`${`Selector ${t.selectorExpression} is followed by unexpected extra arguments: "${t.rest.join(` `)}".`} Selector values with spaces need quotes, e.g. ${h(e,t)??`text="Sign in"`}.`}function h(e,t){let n=e.length-t.rest.length,r=e[n-1];if(r===void 0)return;let i=r.indexOf(`=`);if(i<=0)return;let a=[r.slice(i+1),...t.rest].join(` `),o=`${r.slice(0,i+1)}${g(a)}`;return[...e.slice(0,n-1),o].join(` `)}function g(e){return`"${e.replaceAll(`\\`,String.raw`\\`).replaceAll(`"`,String.raw`\"`)}"`}function _(e){return e.join(` `).trim()||void 0}export{c as n,o as r,l as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{G as e,N as t,P as n,n as r}from"./sdk-contracts.js";import{C as i,p as a}from"./sdk-device.js";import{fn as o}from"./sdk-batch.js";import{i as s,s as c,u as l}from"./target-evidence.js";import{A as u,M as d,d as f,t as p}from"./parameterized-recorded-fill.js";import{i as m}from"./mobile-snapshot-semantics.js";import{r as h}from"./request-cancel.js";import"./request.js";import{n as g}from"./provider-device-admission.js";import{O as _,_ as v,g as y,i as b,m as x,o as S,u as C,v as w}from"./session-snapshot.js";import{i as T}from"./internal/daemon.js";function E(e){let{req:t,logPath:n,traceLogPath:r}=e;return{verbose:t.flags?.verbose,logPath:n,traceLogPath:r,requestId:t.meta?.requestId,iosXctestrunFile:t.flags?.iosXctestrunFile,iosXctestDerivedDataPath:t.flags?.iosXctestDerivedDataPath,iosXctestEnvDir:t.flags?.iosXctestEnvDir}}function D(e,t){return!(!e||!a(e.device)||g(e.device)||t.skipPendingPostGestureStabilization&&y(e))}function O(e){let{session:t,selectorExpression:n}=e;return D(t,{skipPendingPostGestureStabilization:!0})?o(n):null}function k(e){let t=e.identifier?.trim();if(t)return{key:`id`,value:t};let n=e.label?.trim();return n?{key:`label`,value:n}:null}async function A(e,t,n){let r=await x(e.device,t,e.appBundleId,n),i=r.found===!0,a=j(r);return{found:i,...typeof r.text==`string`?{text:r.text}:{},...a?{node:a}:{}}}function j(e){let t=e.nodes;if(!Array.isArray(t))return;let n=t[0];if(!(!n||typeof n!=`object`))return n}const M=new Set([`ELEMENT_NOT_FOUND`,`ELEMENT_OFFSCREEN`,`AMBIGUOUS_MATCH`]);function N(t,r){let i=n(t);return i.details?.dispatched!==`no`||e(i)?!1:M.has(i.code)?r.delegateSemanticFailures:i.code===`COMMAND_FAILED`}async function P(e){let{session:t,node:n,rootViewport:r,requestOptions:i}=e,a=k(n);if(!a)return null;let o;try{o=await A(t,a,i)}catch{return null}if(!o.found||!o.node?.rect)return null;let s={rect:o.node.rect,hittable:o.node.hittable===!0};return m(s,r)?s.rect:null}function F(e){let{operations:t,command:n,positionals:r,actionCommand:i=n,flags:a,result:o,responseData:c,recordedTarget:l,recordedTargets:u,actionStartedAt:d,actionFinishedAt:f,androidFreshnessBaseline:p}=e,m=w(a),[h,g]=L({command:n,positionals:r,flags:m,result:o,responseData:c}),_=t.isSessionRecording()&&l?s(l):void 0,v=t.isSessionRecording()&&u?I(u):void 0;return t.recordAction({command:n,positionals:r,flags:m??{},result:h,..._?{targetEvidence:_}:{},...v?{targetEvidences:v}:{}}),t.markDeferredOutcome({command:n,action:i,positionals:r,flags:a,androidFreshnessBaseline:p}),t.recordGestureVisualization(i,r,h,m??{},d,f),{ok:!0,data:g}}function I(e){let t=s(e.source),n=s(e.destination);return t&&n?{source:t,destination:n}:void 0}function L(e){if(e.command!==`fill`||typeof e.flags?.recordAs!=`string`)return[e.result,e.responseData];let t=u({ts:0,command:`fill`,positionals:e.positionals,flags:e.flags,result:e.result}),n=d(e.flags.recordAs);return[p(e.result,t,n),p(e.responseData,t,n)]}function R(e){let n=e.sessionStore.get(e.sessionName);if(!n)throw new t(`SESSION_NOT_FOUND`,r);return B({requestId:e.req.meta?.requestId,flags:e.req.flags,session:n,contextFromFlags:e.contextFromFlags,captureSnapshot:async(t,r)=>{let i=await e.captureSnapshotForSession(n,t,e.sessionStore,e.contextFromFlags,r);return c(e.captureProof,i)},runtimeSessions:S({sessionName:e.sessionName,getSession:()=>n,recordOptions:{includeSnapshot:!0,omitRefFrameSnapshot:e.req.internal?.findResolvedTarget!==void 0},setRecord:t=>{t.snapshot&&(b(n,t.snapshot),e.sessionStore.set(e.sessionName,n))}}),expireRefFrame:()=>_(n),confirmOffscreenTargetVisible:D(n,{skipPendingPostGestureStabilization:!1})?async(t,r)=>await P({session:n,node:t,rootViewport:r,requestOptions:E({req:e.req,logPath:e.logPath,traceLogPath:n.trace?.outPath})}):void 0,pairedGestureViewport:e.pairedGestureViewport,touchExecutor:e.touchExecutor,gestures:e.gestures})}function z(e){let{session:t,sessionStore:n,...r}=e;return F({...r,operations:{recordAction:n.recordAction.bind(n,t),markDeferredOutcome:e=>v({session:t,...e}),isSessionRecording:f.bind(null,t),recordGestureVisualization:T.bind(null,t)}})}function B(e){return C({backend:V(e),...l(`interaction commands`,{plural:!0}),sessions:e.runtimeSessions,signal:h(e.requestId)})}function V(e){let{flags:t,session:n}=e;return{platform:i(n.device),captureSnapshot:async(n,r)=>({snapshot:await e.captureSnapshot(t,{interactiveOnly:r?.interactiveOnly===!0,preferredBackend:r?.preferredBackend,includeRects:r?.includeRects===!0,signal:n.signal,boundCapture:e.touchExecutor?.captureSnapshot??e.gestures?.captureSnapshot})}),...H(e,()=>e.contextFromFlags(t,n.appBundleId,n.trace?.outPath)),...e.confirmOffscreenTargetVisible?{confirmOffscreenTargetVisible:async(t,n,r)=>await e.confirmOffscreenTargetVisible(n,r)}:{},...U(e.touchExecutor,e.expireRefFrame,t)}}function H(e,t){let n=e.gestures,r=e.pairedGestureViewport;return n?{resolveGestureViewport:async()=>r??await n.gestureViewport?.(t()),performGesture:async(r,i)=>(e.expireRefFrame(),W(await n.performPlan(i,t())))}:r?{resolveGestureViewport:async()=>r}:{}}function U(e,t,n){if(!e)return{};let{tapPoint:r,tapRef:i,fillPoint:a,fillRef:o,longPressPoint:s,hoverPoint:c,hoverRef:l}=e,u=async e=>(t(),W(await e()));return{tap:r?(e,t)=>u(()=>r(t,n)):void 0,tapTarget:i?(e,t)=>u(()=>i(t.ref)):void 0,fill:a?(e,t,n,r)=>u(()=>a(t,n,r)):void 0,fillTarget:o?(e,t,n,r)=>u(()=>o(t.ref,n,r)):void 0,longPress:s?(e,t,n)=>u(()=>s(t,n?.durationMs)):void 0,hover:c?(e,t)=>u(()=>c(t)):void 0,hoverTarget:l?(e,t)=>u(()=>l(t.ref)):void 0}}function W(e){return e&&typeof e==`object`?e:void 0}function G(e,t,n){return{ok:!1,error:{code:e,message:t,...n?{details:n}:{}}}}function K(e,t){if(!t||t.settle===!0)return null;let n=[];return t.settleQuietMs!==void 0&&n.push(`--settle-quiet`),n.length===0?null:G(`INVALID_ARGS`,`${e}: ${n.join(`, `)} require${n.length===1?`s`:``} --settle.`)}function q(e){if(e?.settle===!0)return{...e.settleQuietMs===void 0?{}:{quietMs:e.settleQuietMs},...e.timeoutMs===void 0?{}:{timeoutMs:e.timeoutMs}}}function J(e){try{return Y(e),null}catch(e){if(e instanceof t)return G(e.code,e.message,e.details);throw e}}function Y(e){let n=e.ref.startsWith(`@`)?e.ref.slice(1):e.ref,{admission:r,scope:i,currentGeneration:a}=e.frame;if(r.admitted)return;let o=r.reason===`plain_ref_requires_complete_frame`&&i!==`all`&&i.has(n)&&a!==void 0?`@${n}~s${a}`:void 0;throw new t(`COMMAND_FAILED`,Z(r.reason,e.ref),{reason:r.reason,ref:e.ref,currentGeneration:a,scope:i===`all`?`all`:Array.from(i),...e.mintedGeneration===void 0?{}:{mintedGeneration:e.mintedGeneration},...o?{suggestedRef:o}:{},hint:o?`Retry with the exact emitted ref ${o}.`:e.staleRefsWarning??X})}const X=`Capture a fresh interactive snapshot (snapshot -i) or use a stable selector, then retry.`;function Z(e,t){switch(e){case`ref_frame_expired`:return`Ref ${t} belongs to an expired ref frame — a device action since the snapshot invalidated it`;case`ref_generation_mismatch`:return`Ref ${t} was minted from a superseded snapshot generation`;case`plain_ref_requires_complete_frame`:return`Ref ${t} needs a complete snapshot — the current frame only authorizes its emitted refs`;case`ref_not_issued`:return`Ref ${t} was not issued by the current ref frame`}}export{R as a,D as c,K as i,O as l,J as n,z as o,q as r,N as s,Y as t};
|
package/dist/src/interaction.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{d as e,i as t,s as n}from"./session-snapshot.js";import{s 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:t,options:i,context:a})=>{let{snapshot:o}=await n({device:r.device,session:r,flags:t,outPath:t.out,logPath:a.logPath??``,includeRects:i.includeRects,androidFreshnessMode:i.androidFreshnessMode,signal:i.signal,...i.boundCapture?{captureData:async()=>await i.boundCapture(e({flags:t,session:r,snapshotScope:t.snapshotScope,includeRects:i.includeRects,signal:i.signal,context:a}))}:{}});return o},publishSnapshot:e=>{t(r,e),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{G as e,N as t,P as n,U as r,d as i,j as a,m as o,o as s}from"./sdk-contracts.js";import{p as c}from"./sdk-batch-runner.js";import{C as l,m as u}from"./sdk-device.js";import{C as d,h as f,m as p,p as ee}from"./sdk-batch.js";import{c as te,o as ne}from"./scroll-gesture.js";import{C as m,E as re,S as ie,v as ae,x as h}from"./script.js";import{c as oe}from"./target-evidence.js";import{N as se,d as g}from"./parameterized-recorded-fill.js";import{S as ce,u as _}from"./runtime.js";import{n as v}from"./catalog.js";import{r as le}from"./success-text.js";import{i as ue,n as de,r as fe}from"./click-button.js";import{r as pe,t as me}from"./interaction-positionals.js";import{r as y}from"./diagnostics.js";import{t as he}from"./timeouts.js";import"./diagnostics2.js";import"./retry.js";import"./gesture-plan.js";import{r as ge}from"./request-cancel.js";import"./request.js";import{i as b}from"./request-runtime-binding.js";import{L as x,M as _e,P as S,d as ve,n as ye,r as C,t as be,u as xe}from"./session-snapshot.js";import{n as w,t as T}from"./touch-reference-frame.js";import{c as Se,s as Ce}from"./quality-warnings.js";import{i as we,r as E}from"./internal/daemon.js";import{a as Te,c as Ee,i as D,l as De,n as O,o as k,r as A,s as Oe,t as ke}from"./interaction-ref-policy.js";import{t as j}from"./gesture-runtime.js";import{d as Ae,g as M,i as je,r as Me,u as Ne}from"./selector-runtime.js";import{n as Pe}from"./type-text-runtime.js";function Fe(e){let n=e.flags?.recordAs;if(n!==void 0){if(se(n),e.flags?.noRecord)throw new t(`INVALID_ARGS`,`fill --record-as cannot be combined with --no-record because no script step would be published.`);if(!e.isSessionRecording&&!e.replayPlanStep)throw new t(`INVALID_ARGS`,`fill --record-as requires an armed script recording. Start a fresh session with open --save-script, then retry the fill.`)}}async function N(e,t){if(!_e(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 P(e,t){return!u(e.device)||e.surface!==`desktop`&&e.surface!==`menubar`||e.surface===`menubar`&&(t===`click`||t===`press`)?null:s(`UNSUPPORTED_OPERATION`,`${t} is not supported on macOS ${e.surface} sessions yet. Open an app session to act, or use the ${e.surface} surface to inspect.`)}const Ie=new Set(f()),Le=new Set([`currentUptimeMs`,`gestureEndUptimeMs`,`gestureStartUptimeMs`,`sequenceResults`]);function F(e){if(e)return Object.fromEntries(Object.entries(e).filter(([e])=>!Le.has(e)))}function Re(e){return Be({fields:ze(e.command),input:e.input??{},data:F(e.data),controlledFields:Ie})}function ze(e){let t=d(e);if(!t)throw Error(`Missing response data transform descriptor for ${e}`);return t.fields}function Be(e){let t=Object.fromEntries(Object.entries(e.data??{}).filter(([t])=>!e.controlledFields.has(t)));for(let[n,r]of Object.entries(e.fields)){let i=e.input[n]===void 0?r.defaultValue:e.input[n];if(i===void 0||r.omitDefault===!0&&i===r.defaultValue){delete t[n];continue}t[n]=i}return Object.fromEntries(Object.entries(t).filter(([,e])=>e!==void 0))}async function Ve(e){let{session:t,flags:n,sessionStore:r,contextFromFlags:i,captureSnapshotForSession:a,observation:o}=e,s=t.screenRecording?.handle;if(!s)return;let c=s.inspect().touchReferenceFrame;if(c)return c;if(t.device.platform===`android`&&!t.lease?.leaseProvider&&!b(t.device)){if(!o)throw Error(`Android observation was not injected into the request`);let e=await o.readScreenSize(t.device),n={referenceWidth:e.width,referenceHeight:e.height};return s.setTouchReferenceFrame(n),n}let l=T(t.snapshot);if(l)return s.setTouchReferenceFrame(l),l;let u=await a(t,n,r,i,{interactiveOnly:!0}),d=T(u);return d&&s.setTouchReferenceFrame(d),d}async function He(e){try{return await Ve(e)}catch(t){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 I(e){let{data:t,fallbackX:n,fallbackY:r,referenceFrame:i,extra:a}=e,o=We(a,n,r)??(typeof t?.message==`string`?t.message:void 0);return Ue({...t??{},...n===void 0||r===void 0?{}:{x:n,y:r},...i??{},...a??{},...le(o)})}function Ue(e){return Object.fromEntries(Object.entries(e).filter(([,e])=>e!==void 0))}function We(e,t,n){let r=L(e,`text`);if(r!==void 0)return`Filled ${Array.from(r).length} chars`;let i=Ge(t,n),a=Ke(e);if(a)return Je(a,e??{},i);if(i)return qe(e,i)}function L(e,t){let n=e?.[t];return typeof n==`string`?n:void 0}function Ge(e,t){return e===void 0||t===void 0?``:` (${e}, ${t})`}function Ke(e){let t=L(e,`ref`);return t===void 0?L(e,`selector`):`@${t}`}function qe(e,t){return e?.gesture===`longpress`?`Long pressed${t}`:e?.gesture===`hover`?`Hovered${t}`:`Tapped${t}`}function Je(e,t,n){let r=typeof t.button==`string`?t.button:void 0;return t.gesture===`longpress`?`Long pressed ${e}${n}`:t.gesture===`hover`?`Hovered ${e}${n}`:r&&r!==`primary`?`Clicked ${r} ${e}${n}`:`Tapped ${e}${n}`}function R(e){if(e.length<2)return null;let t=Number(e[0]),n=Number(e[1]);return!Number.isFinite(t)||!Number.isFinite(n)?null:{x:t,y:n}}function z(e,t){let n=R(e);if(n)return{ok:!0,target:{kind:`point`,x:n.x,y:n.y}};let r=e[0]??``;if(r.startsWith(`@`)){let t=M(r);return t.ok?{ok:!0,target:{kind:`ref`,ref:t.ref,fallbackLabel:e.slice(1).join(` `).trim()},refGeneration:t.generation}:{ok:!1,response:t.response}}let i=e.join(` `).trim();return i?{ok:!0,target:{kind:`selector`,selector:i}}:{ok:!1,response:s(`INVALID_ARGS`,`${t} requires @ref, selector expression, or x y coordinates`)}}function Ye(e){let t=R(e);if(t)return{ok:!0,target:{kind:`point`,x:t.x,y:t.y},...tt(e[2])};let n=et(e),r=z(n.targetPositionals,`longpress`);return r.ok?{ok:!0,target:r.target,refGeneration:r.refGeneration,...n.duration}:r}function B(e){return{ok:!1,response:s(`INVALID_ARGS`,`fill requires text after ${e} (use "" to clear the field)`)}}function Xe(e){let t=Ze(e);if(!t)return{ok:!1,response:s(`INVALID_ARGS`,`fill requires x y text, @ref text, or selector text`)};switch(t.kind){case`ref`:{let n=M(e[0]??``);return n.ok?t.text===void 0?B(`ref`):{ok:!0,target:{kind:`ref`,ref:n.ref},refGeneration:n.generation,text:t.text}:{ok:!1,response:n.response}}case`point`:return t.text===void 0?B(`coordinates`):{ok:!0,target:{kind:`point`,x:t.target.x,y:t.target.y},text:t.text};case`selector`:return t.text===void 0||t.text.length>0&&!t.text.trim()?B(`selector`):{ok:!0,target:{kind:`selector`,selector:t.target.selector},text:t.text}}}function Ze(e){try{return me(e)}catch{return null}}function Qe(e){let t=`evidence`in e?e.evidence:void 0,n=e.settle;return e.kind===`ref`?{ref:pe(e.target?.kind===`ref`?e.target.ref:void 0),refLabel:e.refLabel,selectorChain:e.selectorChain,targetHittable:e.targetHittable,hint:e.hint,evidence:t,settle:n,resolution:e.resolution}:e.kind===`selector`?{selector:e.target?.kind===`selector`?e.target.selector:void 0,selectorChain:e.selectorChain,refLabel:e.refLabel,targetHittable:e.targetHittable,hint:e.hint,evidence:t,settle:n,resolution:e.resolution}:{evidence:t,settle:n}}function $e(e,t){return e.kind===`point`?`coordinate tap`:t.kind===`ref`&&t.target?.kind===`ref`?t.target.ref:t.kind===`selector`&&t.target?.kind===`selector`?t.target.selector:`target`}function et(e){let t=e.at(-1);return e.length>1&&nt(t)?{targetPositionals:e.slice(0,-1),duration:{durationMs:Number(t)}}:{targetPositionals:e,duration:{}}}function tt(e){return e===void 0?{}:{durationMs:Number(e)}}function nt(e){return e===void 0||e.trim()===``?!1:Number.isFinite(Number(e))}const rt={source:`direct-ios`,kind:`not-observed`};function V(e,t){if(!it(e))return t;let{resolution:n,...r}=t;return r}function it(e){return`dispatchPath`in e&&e.dispatchPath===`maestro-non-hittable-fallback`}function H(e){return U({source:{kind:`corroborated-tap`,targetKind:e.targetKind,data:{warning:e.warning},publicData:{warning:e.warning},point:e.point,resolution:e.resolution},referenceFrame:e.referenceFrame,extra:e.extra})}function U(e){let{source:t,referenceFrame:n,extra:r}=e;if(t.kind===`runner-payload`||t.kind===`corroborated-tap`){let e={targetKind:t.targetKind,...V(t,{resolution:t.kind===`runner-payload`?rt:t.resolution}),...r??{}};return{result:I({data:t.data,fallbackX:t.point?.x,fallbackY:t.point?.y,referenceFrame:n,extra:e}),responseData:I({data:t.publicData,fallbackX:t.point?.x,fallbackY:t.point?.y,referenceFrame:n,extra:e})}}let{result:i}=t,a={targetKind:i.kind,...V(t,Qe(i)),...st(i.settle,e.settleRefsGeneration),...r??{}},o=I({data:i.backendResult,fallbackX:i.point?.x,fallbackY:i.point?.y,referenceFrame:n,extra:{...a,...ot(i)}}),s=I({data:t.publicData,fallbackX:i.point?.x,fallbackY:i.point?.y,referenceFrame:n,extra:a}),c=ct(`warning`in i?i.warning:void 0,e.staleRefsWarning);return c&&(o.warning=c,s.warning=c),{result:o,responseData:s,...at(i)}}function at(e){let t=W(e)?.node??(`node`in e?e.node:void 0),n=`preAction`in e?e.preAction?.nodes:void 0;return t&&n?{recordedTarget:{node:t,preActionNodes:n}}:{}}function ot(e){let t=W(e);return t?{selectorChain:t.selectorChain,refLabel:t.refLabel}:{}}function W(e){return`recordingTarget`in e?e.recordingTarget:void 0}function st(e,t){return!e?.diff||t===void 0?{}:{settle:{...e,refsGeneration:t}}}function ct(e,t){return t?e?`${e} ${t}`:t:e}async function lt(e){let{params:t,session:n,result:r,publicData:i,extra:a}=e,o=r.kind===`point`?await He({session:n,flags:t.req.flags,sessionStore:t.sessionStore,contextFromFlags:t.contextFromFlags,captureSnapshotForSession:t.captureSnapshotForSession,observation:t.androidObservation}):w(n.snapshot?.nodes??[]);return U({source:{kind:`runtime`,result:r,publicData:i},referenceFrame:o,extra:a,staleRefsWarning:e.staleRefsWarning,settleRefsGeneration:be(n,r.settle)})}function G(e){return e.command?Re({command:e.command,input:e.flags,data:e.data}):F(e.data)}function ut(e,t){return e===`click`||e===`press`||e===`fill`?e:t}function K(e,t){if(!e)return{used:!1,extra:{}};let n=t?.maestroNonHittableCoordinateFallbackUsed===!0;return{used:n,extra:{maestroNonHittableCoordinateFallbackAllowed:!0,maestroNonHittableCoordinateFallbackUsed:n,...n?{maestroFallbackReason:`non-hittable-coordinate`}:{}}}}function q(e){return[String(e.x),String(e.y)]}function dt(n){let{error:r,snapshotGeneration:i,publishPartialRefs:a}=n;if(r.code!==`AMBIGUOUS_MATCH`)return r;let o=e(r.details);return o.length===0||i===void 0?r:(a(o),new t(r.code,r.message,{...r.details,refsGeneration:i},r.cause))}async function ft(e,n,r){let i=await Ne(e,r);if(i){if(i.permissionDialog)return`press ${n} opened an Android permission dialog (${i.foregroundPackage}) over ${i.expectedPackage}. ${i.hint}`;throw new t(`COMMAND_FAILED`,`press ${n} left ${e.appBundleId} and foregrounded ${i.foregroundPackage}. The tap likely escaped the app.`,i)}}function pt(e){return e.code===`COMMAND_FAILED`&&typeof e.details?.expectedPackage==`string`&&typeof e.details?.foregroundPackage==`string`}async function J(e){if(!mt(e))return;let t=gt(e.session.snapshot);if(!t)return;let n=await _t(e,t.snapshot.snapshotQuality,t.presentation);if(!(!n||!vt(t.snapshot,n,e.command)))return xt(t.snapshot,n,e.command)}function mt(e){return ht(e.command)&&n(e.error).code===`XCTEST_RECORDED_FAILURE`&&Ee(e.session,{skipPendingPostGestureStabilization:!1})}function ht(e){return e===`click`||e===`press`}function gt(e){if(!Y(e))return;let t=Date.now()-e.createdAt;if(t<0||t>15e3){y({level:`debug`,phase:`ios_tap_failure_corroboration_stale_baseline`,data:{ageMs:t}});return}let n=St(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 _t(e,t,n){try{let r=Se(t);return await e.captureSnapshotForSession(e.session,Dt(e.flags,n),e.sessionStore,e.contextFromFlags,{interactiveOnly:n?.interactiveOnly??!0,...r?{preferredBackend:r}:{},signal:ge(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 vt(e,t,n){let r=yt(e,t);return r===void 0?bt(e,t,n):r?!0:(y({level:`debug`,phase:`ios_tap_failure_corroboration_identity_mismatch`,data:{command:n}}),!1)}function yt(e,t){if(e.comparisonKey!==void 0||t.comparisonKey!==void 0)return e.comparisonKey!==void 0&&e.comparisonKey===t.comparisonKey}function bt(e,t,n){let r=e.snapshotQuality?.backend,i=t.snapshotQuality?.backend;return!r||r!==i?(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 xt(e,t,n){if(!Y(t))return;let r=_(e.nodes),i=_(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 Y(e){return!!(e&&e.nodes.length>0&&!Ce(e.snapshotQuality))}function St(e){if(!e)return;let t;try{t=JSON.parse(e)}catch{return}return Ct(t)}function Ct(e){let t=wt(e);if(!(!t||typeof t.interactiveOnly!=`boolean`||typeof t.raw!=`boolean`)&&!(!Tt(t.depth)||!Et(t.scope)))return{interactiveOnly:t.interactiveOnly,...typeof t.depth==`number`?{depth:t.depth}:{},...typeof t.scope==`string`?{scope:t.scope}:{},raw:t.raw}}function wt(e){return typeof e==`object`&&e?e:void 0}function Tt(e){return e==null||typeof e==`number`}function Et(e){return e==null||typeof e==`string`}function Dt(e,t){if(!(!e&&!t))return{...e??{},out:void 0,...t?{snapshotDepth:t.depth,snapshotScope:t.scope,snapshotRaw:t.raw}:{}}}function Ot(e){return e.kind===`selector`?{selector:e.selector}:e.kind===`ref`?{ref:e.ref.startsWith(`@`)?e.ref.slice(1):e.ref}:{}}async function kt(e,t,n,r,i){if(e.lease?.leaseProvider)return{aborted:!1,readiness:{status:`clear`},runtimeResult:await r()};let a=await E({session:e,command:t,phase:`before-command`,observation:i});if(n.refContext&&a.status===`recovered`){let t=O({ref:n.refContext.ref,mintedGeneration:n.refContext.mintedGeneration,staleRefsWarning:n.refContext.staleRefsWarning,frame:x({session:e,ref:n.refContext.ref,mintedGeneration:n.refContext.mintedGeneration})});if(t)return{aborted:!0,response:t}}let o=await r();return await E({session:e,command:t,phase:`after-command`,observation:i}),{aborted:!1,readiness:a,runtimeResult:o}}async function X(e,t){let r=e.sessionStore.get(e.sessionName);if(!r)return i();let a=Te({...e,touchExecutor:t.touchExecutor}),o=Date.now();try{let n,i=await kt(r,e.req.command,{refContext:t.refContext},async()=>{let e=await t.run(a);return n=await t.afterRun?.(e),e},e.androidObservation);if(i.aborted)return i.response;let{readiness:s,runtimeResult:c}=i,l=Date.now(),{result:u,responseData:d,recordedTarget:f}=await t.buildPayloads(c),p=[...s.status===`recovered`?[s.warning]:[],...n?[n]:[]];if(p.length>0){let e=[...typeof d.warning==`string`?[d.warning]:[],...p].join(` `);u.warning=e,d.warning=e}return k({session:r,sessionStore:e.sessionStore,command:e.req.command,positionals:e.req.positionals??[],retryPositionals:Nt(e.req.command,c),flags:e.req.flags,result:u,responseData:d,recordedTarget:f,actionStartedAt:o,actionFinishedAt:l,androidFreshnessBaseline:t.androidFreshnessBaseline})}catch(i){let a=dt({error:n(i),snapshotGeneration:r.snapshotGeneration,publishPartialRefs:e=>ye(r,e)});if(pt(a))throw a;return a.code===`AMBIGUOUS_MATCH`?Z(a):await At({error:a,handlerParams:e,session:r,target:t.iosTapCorroboration?.target,extra:t.iosTapCorroboration?.extra,actionStartedAt:o,androidFreshnessBaseline:t.androidFreshnessBaseline})||Z(a)}}async function At(e){if(!e.target)return;let t=ce(e.error);if(!t&&g(e.session))return;let n=await J({error:e.error,command:e.handlerParams.req.command,requestId:e.handlerParams.req.meta?.requestId,flags:e.handlerParams.req.flags,session:e.session,sessionStore:e.handlerParams.sessionStore,contextFromFlags:e.handlerParams.contextFromFlags,captureSnapshotForSession:e.handlerParams.captureSnapshotForSession});if(!n)return;let r=jt({target:e.target,resolvedTarget:t,warning:n.warning,referenceFrame:w(e.session.snapshot?.nodes??[]),extra:e.extra});return k({session:e.session,sessionStore:e.handlerParams.sessionStore,command:e.handlerParams.req.command,positionals:e.handlerParams.req.positionals??[],flags:e.handlerParams.req.flags,result:r.result,responseData:r.responseData,recordedTarget:r.recordedTarget,scheduleInteractionOutcomeRetry:!1,actionStartedAt:e.actionStartedAt,actionFinishedAt:Date.now(),androidFreshnessBaseline:e.androidFreshnessBaseline})}function jt(e){return e.resolvedTarget?U({source:{kind:`runtime`,result:{...e.resolvedTarget,warning:e.warning}},referenceFrame:e.referenceFrame,extra:e.extra}):H({targetKind:e.target.kind,point:Mt(e.target),warning:e.warning,referenceFrame:e.referenceFrame,extra:{...Ot(e.target),...e.extra??{}}})}function Mt(e){return e.kind===`point`?{x:e.x,y:e.y}:void 0}function Z(e){return{ok:!1,error:r(e)}}function Nt(e,t){if(!(t.kind===`ref`&&!t.node)&&(e===`click`||e===`press`))return t.point?q(t.point):void 0}async function Q(e,t,n,r){let i=await ve({device:t.device,command:n,requiresCapture:r,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});return i.ok?{ok:!0,touchExecutor:xe(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,a=r.get(n);if(a){let e=P(a,`fill`);if(e)return e}if(!a)return i();let o=Xe(t.positionals??[]);if(!o.ok)return o.response;let s=await Q(e,a,`fill`,o.target.kind!==`point`);if(!s.ok)return s.response;let{touchExecutor:c}=s;Fe({flags:t.flags,replayPlanStep:t.internal?.replayPlanStep===!0,isSessionRecording:g(a)});let l=D(`fill`,t.flags);if(l)return l;let u=await Ft(e,a,o.target,o.refGeneration);if(u.response)return u.response;let{staleRefsWarning:d}=u,f=t.internal?.replayTargetGuard;return await X(e,{touchExecutor:c,refContext:o.target.kind===`ref`&&t.internal?.findResolvedTarget===void 0?{ref:o.target.ref,mintedGeneration:o.refGeneration,staleRefsWarning:d}:void 0,run:async e=>await e.interactions.fill(o.target,o.text,{session:n,requestId:t.meta?.requestId,delayMs:t.flags?.delayMs,allowNonHittableCoordinateFallback:t.flags?.maestro?.allowNonHittableCoordinateFallback,verify:t.flags?.verify,settle:A(t.flags),expectedResolvedTarget:f,preresolvedTarget:t.internal?.findResolvedTarget}),buildPayloads:e=>It({session:a,result:e,text:o.text,flags:t.flags,staleRefsWarning:d})})}async function Ft(e,t,n,r){if(n.kind!==`ref`)return{};let i=e.req.internal?.findResolvedTarget===void 0?C({session:t,ref:n.ref,mintedGeneration:r}):void 0,a=e.refSnapshotFlagGuardResponse(`fill`,e.req.flags);if(a)return{response:a,staleRefsWarning:i};let o=e.req.internal?.findResolvedTarget?null:O({ref:n.ref,mintedGeneration:r,staleRefsWarning:i,frame:x({session:t,ref:n.ref,mintedGeneration:r})});return o?{response:o,staleRefsWarning:i}:(await N(e,t),{staleRefsWarning:i})}function It(e){let{session:t,result:n}=e,r=K(e.flags?.maestro?.allowNonHittableCoordinateFallback===!0,n.backendResult),i=n.kind===`point`?void 0:w(t.snapshot?.nodes??[]);return U({source:{kind:`runtime`,result:n,publicData:G({command:`fill`,flags:e.flags,data:n.backendResult}),...r.used?{dispatchPath:`maestro-non-hittable-fallback`}:{}},referenceFrame:i,extra:{text:e.text,...r.extra},staleRefsWarning:e.staleRefsWarning,settleRefsGeneration:be(t,n.settle)})}async function Lt(e,t,n,i){let a=e,o={selector:n.raw},s=Date.now();S(t);try{let e=await i(n)??{},r=Date.now(),c=zt(e),l=G({command:ut(a.req.command,`press`),flags:a.req.flags,data:e}),u=K(n.allowNonHittableCoordinateFallback===!0,e),{result:d,responseData:f}=U({source:{kind:`runner-payload`,targetKind:`selector`,data:e,publicData:l,point:c,dispatchPath:u.used?`maestro-non-hittable-fallback`:`maestro-direct-selector`},referenceFrame:Bt(e),extra:{...o,...u.extra}});return k({session:t,sessionStore:a.sessionStore,command:a.req.command,positionals:a.req.positionals??[],retryPositionals:q(c),flags:a.req.flags,result:d,responseData:f,actionStartedAt:s,actionFinishedAt:r})}catch(e){return await Rt({error:e,handlerParams:a,session:t,extra:o,positionals:[],actionStartedAt:s})||(Oe(e,{delegateSemanticFailures:n.allowNonHittableCoordinateFallback!==!0})?(y({level:`debug`,phase:`ios_direct_selector_tap_fallback`,data:{selector:n.raw,error:e instanceof Error?e.message:String(e)}}),null):{ok:!1,error:r(e)})}}async function Rt(e){let{error:t,handlerParams:n,session:r,extra:i,positionals:a,actionStartedAt:o}=e,s=await J({error:t,command:n.req.command,requestId:n.req.meta?.requestId,flags:n.req.flags,session:r,sessionStore:n.sessionStore,contextFromFlags:n.contextFromFlags,captureSnapshotForSession:n.captureSnapshotForSession});if(!s)return;let{result:c,responseData:l}=H({targetKind:`selector`,warning:s.warning,resolution:{source:`direct-ios`,kind:`not-observed`},extra:i});return k({session:r,sessionStore:n.sessionStore,command:n.req.command,positionals:n.req.positionals??a,flags:n.req.flags,result:c,responseData:l,scheduleInteractionOutcomeRetry:!1,actionStartedAt:o,actionFinishedAt:Date.now()})}function zt(e){let t=typeof e.x==`number`?e.x:void 0,n=typeof e.y==`number`?e.y:void 0;return t!==void 0&&n!==void 0?{x:t,y:n}:{x:0,y:0}}function Bt(e){return typeof e.referenceWidth==`number`&&typeof e.referenceHeight==`number`?{referenceWidth:e.referenceWidth,referenceHeight:e.referenceHeight}:void 0}function Vt(e){let{session:t,commandLabel:n,target:r,flags:i}=e;return!e.tapElementSelectorAvailable||i?.maestro?.allowNonHittableCoordinateFallback!==!0||n!==`click`||r.kind!==`selector`||g(t)||Wt(i)||p(n)&&i?.verify===!0||ee(n)&&i?.settle===!0?null:Ht(t,r.selector,i)}function Ht(e,t,n){let r=De({session:e,selectorExpression:t});return r?{...r,...n?.maestro?.allowNonHittableCoordinateFallback?{allowNonHittableCoordinateFallback:!0}:{},...n?.maestro?.expectedTapPoint?{expectedPoint:n.maestro.expectedTapPoint}:{}}:null}const Ut=[`count`,`intervalMs`,`holdMs`,`jitterPx`,`doubleTap`];function Wt(e){return Ut.some(t=>e?.[t]!==void 0)?!0:e?.clickButton!==void 0&&e.clickButton!==`primary`}const Gt=new Set([`press`,`click`]);async function Kt(e,t){let{req:n,sessionStore:r,sessionName:a}=e,o=r.get(a);if(!o)return{response:i()};let s=t===`click`?`click`:t,c=qt(o,t,s,n.flags);if(c)return{response:c};let l=n.positionals??[],u=t===`longpress`?Ye(l):z(l,s);if(!u.ok)return{response:u.response};let d=Yt(o,n,u),f=Zt(e,o,t,u,d);if(f.response)return{response:f.response};let p=ue(n.flags);return{admitted:{session:o,commandLabel:s,clickButton:p,resultButtonTag:de(p),target:u.target,durationMs:t===`longpress`?u.durationMs:void 0,staleRefsWarning:d,refContext:Xt(n,u,d)}}}function qt(e,t,n,r){return P(e,n)||D(t,r)||Jt(e,t,n,r)}function Jt(e,t,n,r){let i=ue(r);if(!Gt.has(t)||i===`primary`)return;let a=fe({commandLabel:n,platform:l(e.device),button:i,count:r?.count,intervalMs:r?.intervalMs,holdMs:r?.holdMs,jitterPx:r?.jitterPx,doubleTap:r?.doubleTap});if(a)return s(a.code,a.message,a.details)}function Yt(e,t,n){if(n.target.kind===`ref`&&t.internal?.findResolvedTarget===void 0)return C({session:e,ref:n.target.ref,mintedGeneration:n.refGeneration})}function Xt(e,t,n){if(t.target.kind===`ref`&&e.internal?.findResolvedTarget===void 0)return{ref:t.target.ref,mintedGeneration:t.refGeneration,staleRefsWarning:n}}function Zt(e,t,n,r,i){let{req:a}=e;if(r.target.kind!==`ref`)return{};let o=e.refSnapshotFlagGuardResponse(n===`click`?`press`:n,a.flags);if(o)return{response:o};let s=a.internal?.findResolvedTarget?null:O({ref:r.target.ref,mintedGeneration:r.refGeneration,staleRefsWarning:i,frame:x({session:t,ref:r.target.ref,mintedGeneration:r.refGeneration})});return s?{response:s}:{}}async function $(e,t){let n=await Kt(e,t);if(`response`in n)return n.response;let{admitted:r}=n,i=await Q(e,r.session,t,r.target.kind!==`point`);if(!i.ok)return i.response;let{touchExecutor:a}=i,o=r.target.kind===`ref`?await N(e,r.session):void 0,s={...r,androidFreshnessBaseline:o},c=e.req.internal?.replayTargetGuard?null:Vt({session:s.session,commandLabel:s.commandLabel,target:s.target,flags:e.req.flags,tapElementSelectorAvailable:a.tapElementSelector!==void 0});if(c&&a.tapElementSelector){let t=await Lt(e,s.session,c,a.tapElementSelector);if(t)return t}return await X(e,{...Qt(e,t,s),touchExecutor:a})}function Qt(e,t,n){let{req:r,sessionName:i}=e,{session:a,target:o,durationMs:s,staleRefsWarning:c,resultButtonTag:l}=n,u=t===`longpress`?{...s===void 0?{}:{durationMs:s},gesture:`longpress`}:t===`hover`?{gesture:`hover`}:l;return{androidFreshnessBaseline:n.androidFreshnessBaseline,refContext:n.refContext,iosTapCorroboration:{target:o,extra:u},run:async e=>await $t({runtime:e,command:t,target:o,sessionName:i,requestId:r.meta?.requestId,clickButton:n.clickButton,flags:r.flags,durationMs:s,expectedResolvedTarget:r.internal?.replayTargetGuard,preresolvedTarget:r.internal?.findResolvedTarget}),afterRun:async t=>{if(!a.lease?.leaseProvider)return await ft(a,$e(o,t),e.androidObservation)},buildPayloads:async n=>{let i=tn(n);return await lt({params:e,session:a,result:n,staleRefsWarning:c,publicData:G({command:t===`longpress`||t===`hover`?void 0:t,flags:r.flags,data:n.backendResult}),extra:t===`longpress`?{...i===void 0?{}:{durationMs:i},gesture:`longpress`}:t===`hover`?{gesture:`hover`}:l})}}}async function $t(e){let{runtime:t,command:n,target:r,sessionName:i,requestId:a,flags:o,expectedResolvedTarget:s}=e,c={session:i,requestId:a,settle:A(o),expectedResolvedTarget:s};switch(n){case`longpress`:return await t.interactions.longPress(r,{...c,durationMs:e.durationMs});case`hover`:return await t.interactions.hover(r,c);case`click`:return await t.interactions.click(r,en(e,c));case`press`:return await t.interactions.press(r,en(e,c))}}function en(e,t){let{flags:n}=e;return{...t,button:e.clickButton,count:n?.count,intervalMs:n?.intervalMs,holdMs:n?.holdMs,jitterPx:n?.jitterPx,doubleTap:n?.doubleTap,verify:n?.verify,preresolvedTarget:e.preresolvedTarget}}function tn(e){return`durationMs`in e?e.durationMs:void 0}function nn(e,t={}){let n=typeof t.executionProfile==`string`?t.executionProfile:void 0;return{kind:e.kind,durationMs:e.durationMs,pointerCount:e.pointerCount,from:e.from,to:e.to,...e.kind===`drag`?{targets:e.targets}:{},...e.backendResult??{},...t,...n?{timing:{executionProfile:n,gestureDurationMs:e.durationMs}}:{},message:e.message}}function rn(e){return`refused`in e}async function an(e){return await dn(e,`gesture`,async t=>on(e,t))}async function on(e,t){let n=re(e.req.input),r=pn(n,t);r.intent===`pan`&&e.req.internal?.gestureExecutionProfile&&(r.executionProfile=e.req.internal.gestureExecutionProfile);let i=await j({device:t.device,input:r,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});return i.ok?cn(n,r,await sn(un(e,i.gestures),{session:e.sessionName,requestId:e.req.meta?.requestId},r,e.req.internal),e.req.flags):{refused:i.response}}async function sn(e,t,n,r){if(n.intent!==`drag`)return await e.interactions.gesture({...t,gesture:n});let i=r?.replayTargetGuards??(r?.replayTargetGuard?{source:r.replayTargetGuard}:void 0);return await e.interactions.gesture({...t,gesture:n,...i?{expectedResolvedTargets:i}:{}})}function cn(e,t,n,r){let i=n.kind===`drag`?n.recording:void 0,a=i?.sourceTarget,o=i?.destinationTarget;return{positionals:hn(e,i),flags:Sn(e,r),responseData:nn(n,{executionProfile:fn(t)}),...e.kind===`pinch`?{recordingResultExtra:{scale:e.scale}}:a?{recordingResultExtra:{selectorChain:a.selectorChain}}:{},...a&&o?{recordedTargets:{source:{node:a.node,preActionNodes:a.preActionNodes},destination:{node:o.node,preActionNodes:o.preActionNodes}}}:{}}}async function ln(e){return await dn(e,`swipe`,async t=>{let n=gn(e.req.input),r=await j({device:t.device,input:m(n).gesture,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});if(!r.ok)return{refused:r.response};let i=n.count??1,a=n.pauseMs??0,o=n.pattern??`one-way`,s=await bn(un(e,r.gestures),e,n,i,a,o);return{positionals:yn(n),flags:e.req.flags,responseData:nn(s,{from:n.from,to:n.to,x1:n.from.x,y1:n.from.y,x2:n.to.x,y2:n.to.y,effectiveDurationMs:s.durationMs,timingMode:`direct`,executionProfile:`endpoint-hold`,count:i,pauseMs:a,pattern:o})}})}function un(e,t){return Te({...e,gestures:t,pairedGestureViewport:e.req.internal?.gestureViewport})}async function dn(e,t,n){let a=e.sessionStore.get(e.sessionName);if(!a)return i();let o=Date.now();try{let r=b(a.device),i=r?{status:`clear`}:await E({session:a,command:t,phase:`before-command`,observation:e.androidObservation}),s=await n(a);if(rn(s))return s.refused;r||await E({session:a,command:t,phase:`after-command`,observation:e.androidObservation});let c={...s.responseData};return i.status===`recovered`&&(c.warning=`${typeof c.warning==`string`?`${c.warning} `:``}${i.warning}`),k({session:a,sessionStore:e.sessionStore,command:t,actionCommand:t,positionals:s.positionals,flags:s.flags,result:{...c,...s.recordingResultExtra??{}},responseData:c,recordedTargets:s.recordedTargets,actionStartedAt:o,actionFinishedAt:Date.now()})}catch(e){return{ok:!1,error:r(e)}}}function fn(e){if(e.intent===`fling`)return`endpoint-hold`;if(e.intent===`pan`)return e.executionProfile??`timed-pan`;if(e.intent===`drag`)return`timed-pan`}function pn(e,t){let n=ie(e);return n.intent===`drag`?{...n,source:mn(n.source,t),destination:mn(n.destination,t)}:n}function mn(e,n){if(!e.startsWith(`@`))return e;let r=a(e);if(!r)throw new t(`INVALID_ARGS`,`Invalid ref "${e}" — malformed generation suffix.`,{hint:o});return ke({ref:r.base,mintedGeneration:r.generation,frame:x({session:n,ref:r.base,mintedGeneration:r.generation})}),r.base}function hn(e,t){return e.kind!==`drag`||!t?h(e):h({...e,source:t.sourceSelector??e.source,destination:t.destinationSelector??e.destination})}function gn(e){if(!e||typeof e!=`object`||Array.isArray(e))throw new t(`INVALID_ARGS`,`swipe requires structured object input`);ae(e);let n=e,r=n.pattern;if(r!==void 0&&r!==`one-way`&&r!==`ping-pong`)throw new t(`INVALID_ARGS`,`swipe pattern must be one-way or ping-pong`);let i={from:vn(n.from,`swipe from`),to:vn(n.to,`swipe to`),count:c(n,`count`,{min:1,max:200}),pauseMs:c(n,`pauseMs`,{min:0,max:ne}),pattern:r};return _n(i),i}function _n(e){let n=e.count??1,r=e.pauseMs??0,i=n*100+Math.max(0,n-1)*r;if(!(i<=6e4))throw new t(`INVALID_ARGS`,`Swipe series must fit within ${te}ms.`,{count:n,pauseMs:r,gestureDurationMs:100,scheduledDurationMs:i,hint:`Reduce --count or --pause-ms.`})}function vn(e,n){if(!e||typeof e!=`object`||Array.isArray(e))throw new t(`INVALID_ARGS`,`${n} must be a point`);let r=e;if(typeof r.x!=`number`||!Number.isFinite(r.x))throw new t(`INVALID_ARGS`,`${n} x must be finite`);if(typeof r.y!=`number`||!Number.isFinite(r.y))throw new t(`INVALID_ARGS`,`${n} y must be finite`);return{x:r.x,y:r.y}}function yn(e){return[String(e.from.x),String(e.from.y),String(e.to.x),String(e.to.y)]}async function bn(e,t,n,r,i,a){let o;for(let s=0;s<r;s+=1){let c=m(xn(n,a,s));o=await e.interactions.gesture({session:t.sessionName,requestId:t.req.meta?.requestId,gesture:c.gesture}),i>0&&s+1<r&&await he(i)}if(!o)throw Error(`Swipe orchestration did not execute a gesture.`);return o}function xn(e,t,n){return t!==`ping-pong`||n%2!=1?e:{...e,from:e.to,to:e.from}}function Sn(e,t){return e.kind!==`pan`||e.pointerCount===void 0?t:{...t,pointerCount:e.pointerCount}}async function Cn(e){let t={},n=await wn({...e,refSnapshotFlagGuardResponse:Ae,captureProof:t});return n&&oe({response:n,consumedTree:t,captureProof:t})}async function wn(e){switch(e.req.command){case`press`:return await $(e,`press`);case`click`:return await $(e,`click`);case`longpress`:return await $(e,`longpress`);case`hover`:return await $(e,`hover`);case`fill`:return await Pt(e);default:return await Tn(e)}}async function Tn(e){switch(e.req.command){case v.gesture:return await an(e);case v.swipe:return await ln(e);case v.type:return await En(e);case`get`:return await Me(e);case`is`:return await je(e);default:return null}}async function En(e){let{sessionName:t,sessionStore:n}=e,r=n.get(t);if(!r)return i();let a=await Pe({device:r.device,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});if(!a.ok)return a.response;let o=await Dn(r,e.androidObservation);return o.response?o.response:await On(e,r,a.typeText,o.warning)}async function Dn(e,t){if(e.device.platform===`android`&&e.screenRecording){let n=await we({session:e,observation:t});if(n.status===`failed`)return{response:s(`COMMAND_FAILED`,`Android system dialog blocked the recording session`)};if(n.status===`unknown`)return{warning:n.warning}}return{}}async function On(e,t,n,i){let{req:a,sessionStore:o}=e,s=Date.now();try{let r=await E({session:t,command:a.command,phase:`before-command`,observation:e.androidObservation});S(t);let c=await n(a.positionals??[],e.contextFromFlags(a.flags,t.appBundleId,t.trace?.outPath));await E({session:t,command:a.command,phase:`after-command`,observation:e.androidObservation});let l=Date.now(),u={...c};return kn(u,i,r),k({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:r(e)}}}function kn(e,t,n){let r=[typeof e.warning==`string`?e.warning:void 0,t];n.status===`recovered`&&r.push(n.warning);let i=r.filter(e=>typeof e==`string`&&e.length>0).join(` `);i.length>0&&(e.warning=i)}export{Cn as handleInteractionCommands};
|
|
1
|
+
import{N as e,P as t,Y as n,d as r,j as i,m as a,o,q as s}from"./sdk-contracts.js";import{p as c}from"./sdk-batch-runner.js";import{C as l,m as u}from"./sdk-device.js";import{g as d,h as f,m as p,w as ee}from"./sdk-batch.js";import{c as te,o as ne}from"./scroll-gesture.js";import{C as re,E as ie,S as ae,v as oe,x as m}from"./script.js";import{c as se}from"./target-evidence.js";import{N as ce,d as h}from"./parameterized-recorded-fill.js";import{S as le,v as g}from"./runtime.js";import{n as _}from"./catalog.js";import{r as ue}from"./success-text.js";import{i as v,n as de,r as fe}from"./click-button.js";import{r as pe,t as me}from"./interaction-positionals.js";import{r as y}from"./diagnostics.js";import{t as he}from"./timeouts.js";import"./diagnostics2.js";import"./retry.js";import"./gesture-plan.js";import{r as ge}from"./request-cancel.js";import"./request.js";import{n as _e}from"./provider-device-admission.js";import{E as ve,O as ye,j as b,n as be,r as x,t as S}from"./session-snapshot.js";import{n as C,t as w}from"./touch-reference-frame.js";import{c as xe,s as Se}from"./quality-warnings.js";import{a as T,n as Ce,o as we,t as E}from"./internal/daemon.js";import{a as D,c as Te,i as O,l as Ee,n as k,o as A,r as j,s as De,t as Oe}from"./interaction-ref-policy.js";import{n as ke,t as Ae}from"./touch-runtime2.js";import{t as M}from"./gesture-runtime.js";import{d as je,g as N,i as Me,r as Ne,u as Pe}from"./selector-runtime.js";import{n as Fe}from"./type-text-runtime.js";function Ie(t){let n=t.flags?.recordAs;if(n!==void 0){if(ce(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!u(e.device)||e.surface!==`desktop`&&e.surface!==`menubar`||e.surface===`menubar`&&(t===`click`||t===`press`)?null:o(`UNSUPPORTED_OPERATION`,`${t} is not supported on macOS ${e.surface} sessions yet. Open an app session to act, or use the ${e.surface} surface to inspect.`)}const Le=new Set(d()),Re=new Set([`currentUptimeMs`,`gestureEndUptimeMs`,`gestureStartUptimeMs`,`sequenceResults`]);function I(e){if(e)return Object.fromEntries(Object.entries(e).filter(([e])=>!Re.has(e)))}function ze(e){return Ve({fields:Be(e.command),input:e.input??{},data:I(e.data),controlledFields:Le})}function Be(e){let t=ee(e);if(!t)throw Error(`Missing response data transform descriptor for ${e}`);return t.fields}function Ve(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 He(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&&!_e(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=w(t.snapshot);if(l)return s.setTouchReferenceFrame(l),l;let u=await a(t,n,r,i,{interactiveOnly:!0}),d=w(u);return d&&s.setTouchReferenceFrame(d),d}async function Ue(e){try{return await He(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=Ge(a,n,r)??(typeof t?.message==`string`?t.message:void 0);return We({...t??{},...n===void 0||r===void 0?{}:{x:n,y:r},...i??{},...a??{},...ue(o)})}function We(e){return Object.fromEntries(Object.entries(e).filter(([,e])=>e!==void 0))}function Ge(e,t,n){let r=R(e,`text`);if(r!==void 0)return`Filled ${Array.from(r).length} chars`;let i=Ke(t,n),a=qe(e);if(a)return Ye(a,e??{},i);if(i)return Je(e,i)}function R(e,t){let n=e?.[t];return typeof n==`string`?n:void 0}function Ke(e,t){return e===void 0||t===void 0?``:` (${e}, ${t})`}function qe(e){let t=R(e,`ref`);return t===void 0?R(e,`selector`):`@${t}`}function Je(e,t){return e?.gesture===`longpress`?`Long pressed${t}`:e?.gesture===`hover`?`Hovered${t}`:`Tapped${t}`}function Ye(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:o(`INVALID_ARGS`,`${t} requires @ref, selector expression, or x y coordinates`)}}function Xe(e){let t=z(e);if(t)return{ok:!0,target:{kind:`point`,x:t.x,y:t.y},...nt(e[2])};let n=tt(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:o(`INVALID_ARGS`,`fill requires text after ${e} (use "" to clear the field)`)}}function Ze(e){let t=Qe(e);if(!t)return{ok:!1,response:o(`INVALID_ARGS`,`fill requires x y text, @ref text, or selector text`)};switch(t.kind){case`ref`:{let n=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 Qe(e){try{return me(e)}catch{return null}}function $e(e){let t=`evidence`in e?e.evidence:void 0,n=e.settle;return e.kind===`ref`?{ref:pe(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 et(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 tt(e){let t=e.at(-1);return e.length>1&&rt(t)?{targetPositionals:e.slice(0,-1),duration:{durationMs:Number(t)}}:{targetPositionals:e,duration:{}}}function nt(e){return e===void 0?{}:{durationMs:Number(e)}}function rt(e){return e===void 0||e.trim()===``?!1:Number.isFinite(Number(e))}const it={source:`direct-ios`,kind:`not-observed`};function H(e,t){if(!at(e))return t;let{resolution:n,...r}=t;return r}function at(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`?it: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,$e(i)),...ct(i.settle,e.settleRefsGeneration),...r??{}},o=L({data:i.backendResult,fallbackX:i.point?.x,fallbackY:i.point?.y,referenceFrame:n,extra:{...a,...st(i)}}),s=L({data:t.publicData,fallbackX:i.point?.x,fallbackY:i.point?.y,referenceFrame:n,extra:a}),c=lt(`warning`in i?i.warning:void 0,e.staleRefsWarning);return c&&(o.warning=c,s.warning=c),`readiness`in i&&i.readiness&&(s.readiness=i.readiness),{result:o,responseData:s,...ot(i)}}function ot(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 st(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 ct(e,t){return!e?.diff||t===void 0?{}:{settle:{...e,refsGeneration:t}}}function lt(e,t){return t?e?`${e} ${t}`:t:e}async function ut(e){let{params:t,session:n,result:r,publicData:i,extra:a}=e,o=r.kind===`point`?await Ue({session:n,flags:t.req.flags,sessionStore:t.sessionStore,contextFromFlags:t.contextFromFlags,captureSnapshotForSession:t.captureSnapshotForSession,observation:t.androidObservation}):C(n.snapshot?.nodes??[]);return W({source:{kind:`runtime`,result:r,publicData:i},referenceFrame:o,extra:a,staleRefsWarning:e.staleRefsWarning,settleRefsGeneration:S(n,r.settle)})}function K(e){return e.command?ze({command:e.command,input:e.flags,data:e.data}):I(e.data)}function dt(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 ft(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 pt(t,n,r){let i=await Pe(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 mt(e){return e.code===`COMMAND_FAILED`&&typeof e.details?.expectedPackage==`string`&&typeof e.details?.foregroundPackage==`string`}async function J(e){if(!ht(e))return;let t=_t(e.session.snapshot);if(!t)return;let n=await vt(e,t.snapshot.snapshotQuality,t.presentation);if(!(!n||!yt(t.snapshot,n,e.command)))return St(t.snapshot,n,e.command)}function ht(e){return gt(e.command)&&t(e.error).code===`XCTEST_RECORDED_FAILURE`&&Te(e.session,{skipPendingPostGestureStabilization:!1})}function gt(e){return e===`click`||e===`press`}function _t(e){if(!Y(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=Ct(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 vt(e,t,n){try{let r=xe(t);return await e.captureSnapshotForSession(e.session,Ot(e.flags,n),e.sessionStore,e.contextFromFlags,{interactiveOnly:n?.interactiveOnly??!0,...r?{preferredBackend:r}:{},signal:ge(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 yt(e,t,n){let r=bt(e,t);return r===void 0?xt(e,t,n):r?!0:(y({level:`debug`,phase:`ios_tap_failure_corroboration_identity_mismatch`,data:{command:n}}),!1)}function bt(e,t){if(e.comparisonKey!==void 0||t.comparisonKey!==void 0)return e.comparisonKey!==void 0&&e.comparisonKey===t.comparisonKey}function xt(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 St(e,t,n){if(!Y(t))return;let r=g(e.nodes),i=g(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 Y(e){return!!(e&&e.nodes.length>0&&!Se(e.snapshotQuality))}function Ct(e){if(!e)return;let t;try{t=JSON.parse(e)}catch{return}return wt(t)}function wt(e){let t=Tt(e);if(!(!t||typeof t.interactiveOnly!=`boolean`||typeof t.raw!=`boolean`)&&!(!Et(t.depth)||!Dt(t.scope)))return{interactiveOnly:t.interactiveOnly,...typeof t.depth==`number`?{depth:t.depth}:{},...typeof t.scope==`string`?{scope:t.scope}:{},raw:t.raw}}function Tt(e){return typeof e==`object`&&e?e:void 0}function Et(e){return e==null||typeof e==`number`}function Dt(e){return e==null||typeof e==`string`}function Ot(e,t){if(!(!e&&!t))return{...e??{},out:void 0,...t?{snapshotDepth:t.depth,snapshotScope:t.scope,snapshotRaw:t.raw}:{}}}function kt(e){return e.kind===`selector`?{selector:e.selector}:e.kind===`ref`?{ref:e.ref.startsWith(`@`)?e.ref.slice(1):e.ref}:{}}async function At(e,t,n,r,i){if(e.lease?.leaseProvider)return{aborted:!1,readiness:{status:`clear`},runtimeResult:await r()};let a=await T({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:b({session:e,ref:n.refContext.ref,mintedGeneration:n.refContext.mintedGeneration})});if(t)return{aborted:!0,response:t}}let o=await r();return await T({session:e,command:t,phase:`after-command`,observation:i}),{aborted:!1,readiness:a,runtimeResult:o}}async function X(e,n){let i=e.sessionStore.get(e.sessionName);if(!i)return r();let a=D({...e,touchExecutor:n.touchExecutor}),o=Date.now();try{let t,r=await At(i,e.req.command,{refContext:n.refContext},async()=>{let e=await n.run(a);return t=await n.afterRun?.(e),e},e.androidObservation);if(r.aborted)return r.response;let{readiness:s,runtimeResult:c}=r,l=Date.now(),{result:u,responseData:d,recordedTarget:f}=await n.buildPayloads(c),p=[...s.status===`recovered`?[s.warning]:[],...t?[t]:[]];if(p.length>0){let e=[...typeof d.warning==`string`?[d.warning]:[],...p].join(` `);u.warning=e,d.warning=e}return A({session:i,sessionStore:e.sessionStore,command:e.req.command,positionals:e.req.positionals??[],flags:e.req.flags,result:u,responseData:d,recordedTarget:f,actionStartedAt:o,actionFinishedAt:l,androidFreshnessBaseline:n.androidFreshnessBaseline})}catch(r){let a=ft({error:t(r),snapshotGeneration:i.snapshotGeneration,publishPartialRefs:e=>be(i,e)});if(mt(a))throw a;return a.code===`AMBIGUOUS_MATCH`?Z(a):await jt({error:a,handlerParams:e,session:i,target:n.iosTapCorroboration?.target,extra:n.iosTapCorroboration?.extra,actionStartedAt:o,androidFreshnessBaseline:n.androidFreshnessBaseline})||Z(a)}}async function jt(e){if(!e.target)return;let t=le(e.error);if(!t&&h(e.session))return;let n=await J({error:e.error,command:e.handlerParams.req.command,requestId:e.handlerParams.req.meta?.requestId,flags:e.handlerParams.req.flags,session:e.session,sessionStore:e.handlerParams.sessionStore,contextFromFlags:e.handlerParams.contextFromFlags,captureSnapshotForSession:e.handlerParams.captureSnapshotForSession});if(!n)return;let r=Mt({target:e.target,resolvedTarget:t,warning:n.warning,referenceFrame:C(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,actionStartedAt:e.actionStartedAt,actionFinishedAt:Date.now(),androidFreshnessBaseline:e.androidFreshnessBaseline})}function Mt(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:Nt(e.target),warning:e.warning,referenceFrame:e.referenceFrame,extra:{...kt(e.target),...e.extra??{}}})}function Nt(e){return e.kind===`point`?{x:e.x,y:e.y}:void 0}function Z(e){return{ok:!1,error:s(e)}}async function Q(e,t,n,r){let i=await ke({device:t.device,command:n,requiresCapture:r,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});return i.ok?{ok:!0,touchExecutor:Ae(i.runtime,e.contextFromFlags(e.req.flags,t.appBundleId,t.trace?.outPath))}:{ok:!1,response:E(i.response)}}async function Pt(e){let t=await Ft(e);if(`response`in t)return t.response;let{session:n,parsedTarget:r,touchExecutor:i,staleRefsWarning:a}=t.admitted,{req:o,sessionName:s}=e,c=o.internal?.replayTargetGuard;return await X(e,{touchExecutor:i,refContext:r.target.kind===`ref`&&o.internal?.findResolvedTarget===void 0?{ref:r.target.ref,mintedGeneration:r.refGeneration,staleRefsWarning:a}:void 0,run:async e=>await e.interactions.fill(r.target,r.text,{session:s,requestId:o.meta?.requestId,delayMs:o.flags?.delayMs,allowNonHittableCoordinateFallback:o.flags?.maestro?.allowNonHittableCoordinateFallback,verify:o.flags?.verify,settle:j(o.flags),expectedResolvedTarget:c,preresolvedTarget:o.internal?.findResolvedTarget}),buildPayloads:e=>zt({session:n,result:e,text:r.text,flags:o.flags,staleRefsWarning:a})})}async function Ft(e){try{let t=await It(e);return`response`in t?{response:E(t.response)}:t}catch(e){throw Ce(e)}}async function It(e){let{req:t}=e,n=Lt(e);if(`response`in n)return n;let{session:r,parsedTarget:i}=n,a=await Q(e,r,`fill`,i.target.kind!==`point`);if(!a.ok)return{response:a.response};Ie({flags:t.flags,replayPlanStep:t.internal?.replayPlanStep===!0,isSessionRecording:h(r)});let o=O(`fill`,t.flags);if(o)return{response:o};let s=await Rt(e,r,i.target,i.refGeneration);return s.response?{response:s.response}:{admitted:{session:r,parsedTarget:i,touchExecutor:a.touchExecutor,staleRefsWarning:s.staleRefsWarning}}}function Lt(e){let t=e.sessionStore.get(e.sessionName);if(!t)return{response:r()};let n=F(t,`fill`);if(n)return{response:n};let i=Ze(e.req.positionals??[]);return i.ok?{session:t,parsedTarget:i}:{response:i.response}}async function Rt(e,t,n,r){if(n.kind!==`ref`)return{};let i=e.req.internal?.findResolvedTarget===void 0?x({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:b({session:t,ref:n.ref,mintedGeneration:r})});return o?{response:o,staleRefsWarning:i}:(await P(e,t),{staleRefsWarning:i})}function zt(e){let{session:t,result:n}=e,r=q(e.flags?.maestro?.allowNonHittableCoordinateFallback===!0,n.backendResult),i=n.kind===`point`?void 0:C(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:S(t,n.settle)})}async function Bt(e,t,n,r){let i=e,a={selector:n.raw},o=Date.now();ye(t);try{let e=await r(n)??{},s=Date.now(),c=Ht(e),l=K({command:dt(i.req.command,`press`),flags:i.req.flags,data:e}),u=q(n.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:Ut(e),extra:{...a,...u.extra}});return A({session:t,sessionStore:i.sessionStore,command:i.req.command,positionals:i.req.positionals??[],flags:i.req.flags,result:d,responseData:f,actionStartedAt:o,actionFinishedAt:s})}catch(e){return await Vt({error:e,handlerParams:i,session:t,extra:a,positionals:[],actionStartedAt:o})||(De(e,{delegateSemanticFailures:n.allowNonHittableCoordinateFallback!==!0})?(y({level:`debug`,phase:`ios_direct_selector_tap_fallback`,data:{selector:n.raw,error:e instanceof Error?e.message:String(e)}}),null):{ok:!1,error:s(e)})}}async function Vt(e){let{error:t,handlerParams:n,session:r,extra:i,positionals:a,actionStartedAt:o}=e,s=await J({error:t,command:n.req.command,requestId:n.req.meta?.requestId,flags:n.req.flags,session:r,sessionStore:n.sessionStore,contextFromFlags:n.contextFromFlags,captureSnapshotForSession:n.captureSnapshotForSession});if(!s)return;let{result:c,responseData:l}=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,actionStartedAt:o,actionFinishedAt:Date.now()})}function Ht(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 Ut(e){return typeof e.referenceWidth==`number`&&typeof e.referenceHeight==`number`?{referenceWidth:e.referenceWidth,referenceHeight:e.referenceHeight}:void 0}function Wt(e){let{session:t,commandLabel:n,target:r,flags:i}=e;return!e.tapElementSelectorAvailable||i?.maestro?.allowNonHittableCoordinateFallback!==!0||n!==`click`||r.kind!==`selector`||h(t)||qt(i)||f(n)&&i?.verify===!0||p(n)&&i?.settle===!0?null:Gt(t,r.selector,i)}function Gt(e,t,n){let r=Ee({session:e,selectorExpression:t});return r?{...r,...n?.maestro?.allowNonHittableCoordinateFallback?{allowNonHittableCoordinateFallback:!0}:{},...n?.maestro?.expectedTapPoint?{expectedPoint:n.maestro.expectedTapPoint}:{}}:null}const Kt=[`count`,`intervalMs`,`holdMs`,`jitterPx`,`doubleTap`];function qt(e){return Kt.some(t=>e?.[t]!==void 0)?!0:e?.clickButton!==void 0&&e.clickButton!==`primary`}const Jt=new Set([`press`,`click`]);async function Yt(e,t){let n=await Xt(e,t);return`response`in n?{response:E(n.response)}:n}async function Xt(e,t){let{req:n,sessionStore:i,sessionName:a}=e,o=i.get(a);if(!o)return{response:r()};let s=t===`click`?`click`:t,c=Zt(o,t,s,n.flags);if(c)return{response:c};let l=n.positionals??[],u=t===`longpress`?Xe(l):B(l,s);if(!u.ok)return{response:u.response};let d=$t(o,n,u),f=tn(e,o,t,u,d);if(f.response)return{response:f.response};let p=v(n.flags);return{admitted:{session:o,commandLabel:s,clickButton:p,resultButtonTag:de(p),target:u.target,durationMs:t===`longpress`?u.durationMs:void 0,staleRefsWarning:d,refContext:en(n,u,d)}}}function Zt(e,t,n,r){return F(e,n)||O(t,r)||Qt(e,t,n,r)}function Qt(e,t,n,r){let i=v(r);if(!Jt.has(t)||i===`primary`)return;let a=fe({commandLabel:n,platform:l(e.device),button:i,count:r?.count,intervalMs:r?.intervalMs,holdMs:r?.holdMs,jitterPx:r?.jitterPx,doubleTap:r?.doubleTap});if(a)return o(a.code,a.message,a.details)}function $t(e,t,n){if(n.target.kind===`ref`&&t.internal?.findResolvedTarget===void 0)return x({session:e,ref:n.target.ref,mintedGeneration:n.refGeneration})}function en(e,t,n){if(t.target.kind===`ref`&&e.internal?.findResolvedTarget===void 0)return{ref:t.target.ref,mintedGeneration:t.refGeneration,staleRefsWarning:n}}function tn(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:b({session:t,ref:r.target.ref,mintedGeneration:r.refGeneration})});return s?{response:s}:{}}async function $(e,t){let n=await Yt(e,t);if(`response`in n)return n.response;let{admitted:r}=n,i=await Q(e,r.session,t,r.target.kind!==`point`);if(!i.ok)return i.response;let{touchExecutor:a}=i,o=r.target.kind===`ref`?await P(e,r.session):void 0,s={...r,androidFreshnessBaseline:o},c=e.req.internal?.replayTargetGuard?null:Wt({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 Bt(e,s.session,c,a.tapElementSelector);if(t)return t}return await X(e,{...nn(e,t,s),touchExecutor:a})}function nn(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 rn({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 pt(a,et(o,t),e.androidObservation)},buildPayloads:async n=>{let i=on(n);return await ut({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 rn(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,readinessTimeoutMs:o?.readinessTimeoutMs});case`hover`:return await t.interactions.hover(r,c);case`click`:return await t.interactions.click(r,an(e,c));case`press`:return await t.interactions.press(r,an(e,c))}}function an(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,readinessTimeoutMs:n?.readinessTimeoutMs,preresolvedTarget:e.preresolvedTarget}}function on(e){return`durationMs`in e?e.durationMs:void 0}function sn(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 cn(e){return`refused`in e}async function ln(e){return await hn(e,`gesture`,async t=>un(e,t))}async function un(e,t){let n=ie(e.req.input),r=_n(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?fn(n,r,await dn(mn(e,i.gestures),{session:e.sessionName,requestId:e.req.meta?.requestId},r,e.req.internal),e.req.flags):{refused:i.response}}async function dn(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 fn(e,t,n,r){let i=n.kind===`drag`?n.recording:void 0,a=i?.sourceTarget,o=i?.destinationTarget;return{positionals:yn(e,i),flags:En(e,r),responseData:sn(n,{executionProfile:gn(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 pn(e){return await hn(e,`swipe`,async t=>{let n=bn(e.req.input),r=await M({device:t.device,input:re(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 wn(mn(e,r.gestures),e,n,i,a,o);return{positionals:Cn(n),flags:e.req.flags,responseData:sn(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 mn(e,t){return D({...e,gestures:t,pairedGestureViewport:e.req.internal?.gestureViewport})}async function hn(e,t,n){let i=e.sessionStore.get(e.sessionName);if(!i)return r();let a=Date.now();try{let r=_e(i.device),o=r?{status:`clear`}:await T({session:i,command:t,phase:`before-command`,observation:e.androidObservation}),s=await n(i);if(cn(s))return s.refused;r||await T({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:s(e)}}}function gn(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 _n(e,t){let n=ae(e);return n.intent===`drag`?{...n,source:vn(n.source,t),destination:vn(n.destination,t)}:n}function vn(t,n){if(!t.startsWith(`@`))return t;let r=i(t);if(!r)throw new e(`INVALID_ARGS`,`Invalid ref "${t}" — malformed generation suffix.`,{hint:a});return Oe({ref:r.base,mintedGeneration:r.generation,frame:b({session:n,ref:r.base,mintedGeneration:r.generation})}),r.base}function yn(e,t){return e.kind!==`drag`||!t?m(e):m({...e,source:t.sourceSelector??e.source,destination:t.destinationSelector??e.destination})}function bn(t){if(!t||typeof t!=`object`||Array.isArray(t))throw new e(`INVALID_ARGS`,`swipe requires structured object input`);oe(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:Sn(n.from,`swipe from`),to:Sn(n.to,`swipe to`),count:c(n,`count`,{min:1,max:200}),pauseMs:c(n,`pauseMs`,{min:0,max:ne}),pattern:r};return xn(i),i}function xn(t){let n=t.count??1,r=t.pauseMs??0,i=n*100+Math.max(0,n-1)*r;if(!(i<=6e4))throw new e(`INVALID_ARGS`,`Swipe series must fit within ${te}ms.`,{count:n,pauseMs:r,gestureDurationMs:100,scheduledDurationMs:i,hint:`Reduce --count or --pause-ms.`})}function Sn(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 Cn(e){return[String(e.from.x),String(e.from.y),String(e.to.x),String(e.to.y)]}async function wn(e,t,n,r,i,a){let o;for(let s=0;s<r;s+=1){let c=re(Tn(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 he(i)}if(!o)throw Error(`Swipe orchestration did not execute a gesture.`);return o}function Tn(e,t,n){return t!==`ping-pong`||n%2!=1?e:{...e,from:e.to,to:e.from}}function En(e,t){return e.kind!==`pan`||e.pointerCount===void 0?t:{...t,pointerCount:e.pointerCount}}async function Dn(e){let t={},n=await On({...e,refSnapshotFlagGuardResponse:je,captureProof:t});return n&&se({response:n,consumedTree:t,captureProof:t})}async function On(e){switch(e.req.command){case`press`:return await $(e,`press`);case`click`:return await $(e,`click`);case`longpress`:return await $(e,`longpress`);case`hover`:return await $(e,`hover`);case`fill`:return await Pt(e);default:return await kn(e)}}async function kn(e){switch(e.req.command){case _.gesture:return await ln(e);case _.swipe:return await pn(e);case _.type:return await An(e);case`get`:return await Ne(e);case`is`:return await Me(e);default:return null}}async function An(e){let{sessionName:t,sessionStore:n}=e,i=n.get(t);if(!i)return r();let a=await Fe({device:i.device,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});if(!a.ok)return a.response;let o=await jn(i,e.androidObservation);return o.response?o.response:await Mn(e,i,a.typeText,o.warning)}async function jn(e,t){if(e.device.platform===`android`&&e.screenRecording){let n=await we({session:e,observation:t});if(n.status===`failed`)return{response:o(`COMMAND_FAILED`,`Android system dialog blocked the recording session`)};if(n.status===`unknown`)return{warning:n.warning}}return{}}async function Mn(e,t,n,r){let{req:i,sessionStore:a}=e,o=Date.now();try{let s=await T({session:t,command:i.command,phase:`before-command`,observation:e.androidObservation});ye(t);let c=await n(i.positionals??[],e.contextFromFlags(i.flags,t.appBundleId,t.trace?.outPath));await T({session:t,command:i.command,phase:`after-command`,observation:e.androidObservation});let l=Date.now(),u={...c};return Nn(u,r,s),A({session:t,sessionStore:a,command:i.command,positionals:i.positionals??[],flags:i.flags,result:u,responseData:u,actionStartedAt:o,actionFinishedAt:l})}catch(e){return{ok:!1,error:s(e)}}}function Nn(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{Dn as handleInteractionCommands};
|