@riddledc/riddle-proof 0.7.129 → 0.7.131
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/dist/{chunk-TDK6WFH3.js → chunk-ZYD2SGEM.js} +161 -20
- package/dist/cli.cjs +161 -20
- package/dist/cli.js +1 -1
- package/dist/index.cjs +161 -20
- package/dist/index.js +1 -1
- package/dist/profile.cjs +161 -20
- package/dist/profile.d.cts +2 -0
- package/dist/profile.d.ts +2 -0
- package/dist/profile.js +1 -1
- package/dist/proof-run-engine.d.cts +3 -3
- package/dist/proof-run-engine.d.ts +3 -3
- package/package.json +1 -1
package/dist/profile.cjs
CHANGED
|
@@ -654,6 +654,17 @@ function normalizeSetupActionCoordinateMode(value, index) {
|
|
|
654
654
|
if (normalized === "ratio" || normalized === "relative" || normalized === "fraction") return "ratio";
|
|
655
655
|
throw new Error(`target.setup_actions[${index}].coordinate_mode ${String(value)} is not supported. Supported coordinate modes: pixels, ratio.`);
|
|
656
656
|
}
|
|
657
|
+
function normalizeSetupActionPointerType(value, type, index) {
|
|
658
|
+
if (value === void 0 || value === null || value === "") return void 0;
|
|
659
|
+
if (type !== "drag") {
|
|
660
|
+
throw new Error(`target.setup_actions[${index}].pointer_type is only supported for drag actions.`);
|
|
661
|
+
}
|
|
662
|
+
const normalized = String(value).trim().replace(/-/g, "_").toLowerCase();
|
|
663
|
+
if (normalized === "mouse") return "mouse";
|
|
664
|
+
if (normalized === "touch" || normalized === "finger") return "touch";
|
|
665
|
+
if (normalized === "pen" || normalized === "stylus") return "pen";
|
|
666
|
+
throw new Error(`target.setup_actions[${index}].pointer_type ${String(value)} is not supported. Supported pointer types: mouse, touch, pen.`);
|
|
667
|
+
}
|
|
657
668
|
function normalizeSetupAction(input, index) {
|
|
658
669
|
if (!isRecord(input)) throw new Error(`target.setup_actions[${index}] must be an object.`);
|
|
659
670
|
const type = normalizeSetupActionType(stringValue(input.type), index);
|
|
@@ -672,6 +683,7 @@ function normalizeSetupAction(input, index) {
|
|
|
672
683
|
const toX = numberValue(valueFromOwn(input, "to_x", "toX", "end_x", "endX", "x2"));
|
|
673
684
|
const toY = numberValue(valueFromOwn(input, "to_y", "toY", "end_y", "endY", "y2"));
|
|
674
685
|
const coordinateMode = normalizeSetupActionCoordinateMode(valueFromOwn(input, "coordinate_mode", "coordinateMode", "coords", "units"), index);
|
|
686
|
+
const pointerType = normalizeSetupActionPointerType(valueFromOwn(input, "pointer_type", "pointerType", "input_type", "inputType"), type, index);
|
|
675
687
|
if (type === "drag") {
|
|
676
688
|
if (fromX === void 0 || fromY === void 0 || toX === void 0 || toY === void 0) {
|
|
677
689
|
throw new Error(`target.setup_actions[${index}] drag requires from_x, from_y, to_x, and to_y.`);
|
|
@@ -756,6 +768,7 @@ function normalizeSetupAction(input, index) {
|
|
|
756
768
|
force: type === "click" && (input.force === true || input.force_click === true || input.forceClick === true),
|
|
757
769
|
click_count: normalizeSetupActionClickCount(input, type, index),
|
|
758
770
|
coordinate_mode: coordinateMode,
|
|
771
|
+
pointer_type: pointerType,
|
|
759
772
|
from_x: fromX,
|
|
760
773
|
from_y: fromY,
|
|
761
774
|
to_x: toX,
|
|
@@ -1934,6 +1947,27 @@ function textMatchSamples(sample, check) {
|
|
|
1934
1947
|
const sampleText = textSampleAroundMatch(source, index, text.length);
|
|
1935
1948
|
return sampleText ? [sampleText] : [];
|
|
1936
1949
|
}
|
|
1950
|
+
function textCaseInsensitiveSamples(sample, check) {
|
|
1951
|
+
const source = String(sample || "");
|
|
1952
|
+
const text = check.pattern ? "" : check.text || "";
|
|
1953
|
+
if (!source || !text) return [];
|
|
1954
|
+
const index = source.toLowerCase().indexOf(text.toLowerCase());
|
|
1955
|
+
const sampleText = textSampleAroundMatch(source, index, text.length);
|
|
1956
|
+
return sampleText ? [sampleText] : [];
|
|
1957
|
+
}
|
|
1958
|
+
function textCaseInsensitiveSequenceSamples(texts, check) {
|
|
1959
|
+
const text = check.pattern ? "" : compactTextEvidenceSample(check.text || "");
|
|
1960
|
+
if (!text) return [];
|
|
1961
|
+
const expected = text.toLowerCase();
|
|
1962
|
+
return texts.map((candidate) => compactTextEvidenceSample(candidate)).filter((candidate) => candidate && candidate.toLowerCase().includes(expected)).slice(0, 3).map((candidate) => candidate.slice(0, 240));
|
|
1963
|
+
}
|
|
1964
|
+
function textCaseInsensitiveFailureSamples(viewport, check) {
|
|
1965
|
+
const key = textKey(check);
|
|
1966
|
+
const captured = viewport.text_case_insensitive_samples?.[key] || [];
|
|
1967
|
+
const capturedSamples = captured.map((sample) => compactTextEvidenceSample(sample).slice(0, 240)).filter(Boolean);
|
|
1968
|
+
if (capturedSamples.length) return capturedSamples.slice(0, 3);
|
|
1969
|
+
return textCaseInsensitiveSamples(viewport.body_text_sample || "", check).slice(0, 3);
|
|
1970
|
+
}
|
|
1937
1971
|
function textCheckFailureSamples(viewport, check) {
|
|
1938
1972
|
const key = textKey(check);
|
|
1939
1973
|
const captured = viewport.text_match_samples?.[key] || [];
|
|
@@ -2246,13 +2280,15 @@ function assessCheckFromEvidence(check, evidence) {
|
|
|
2246
2280
|
const matched = matches.length > 0;
|
|
2247
2281
|
const failedAgainstExpectation = matched !== expectedVisible;
|
|
2248
2282
|
const sampleTexts = matches.length ? matches : failedAgainstExpectation ? texts : [];
|
|
2283
|
+
const caseInsensitiveSamples = failedAgainstExpectation && expectedVisible && !matched ? textCaseInsensitiveSequenceSamples(texts, check) : [];
|
|
2249
2284
|
return {
|
|
2250
2285
|
viewport: viewport.name,
|
|
2251
2286
|
selector_count: viewport.selectors?.[key]?.count || 0,
|
|
2252
2287
|
visible_count: viewport.selectors?.[key]?.visible_count || 0,
|
|
2253
2288
|
matched_count: matches.length,
|
|
2254
2289
|
matched,
|
|
2255
|
-
samples: sampleTexts.slice(0, 3).map((text) => text.slice(0, 240))
|
|
2290
|
+
samples: sampleTexts.slice(0, 3).map((text) => text.slice(0, 240)),
|
|
2291
|
+
case_insensitive_samples: caseInsensitiveSamples
|
|
2256
2292
|
};
|
|
2257
2293
|
});
|
|
2258
2294
|
const failed = results.filter((result) => result.matched !== expectedVisible).length;
|
|
@@ -2395,7 +2431,8 @@ function assessCheckFromEvidence(check, evidence) {
|
|
|
2395
2431
|
return {
|
|
2396
2432
|
viewport: viewport.name,
|
|
2397
2433
|
matched,
|
|
2398
|
-
samples: failedAgainstExpectation ? textCheckFailureSamples(viewport, check) : []
|
|
2434
|
+
samples: failedAgainstExpectation ? textCheckFailureSamples(viewport, check) : [],
|
|
2435
|
+
case_insensitive_samples: failedAgainstExpectation && expectedVisible && !matched ? textCaseInsensitiveFailureSamples(viewport, check) : []
|
|
2399
2436
|
};
|
|
2400
2437
|
});
|
|
2401
2438
|
const matches = results.map((result) => result.matched);
|
|
@@ -3025,6 +3062,32 @@ function textMatchSamples(sample, check) {
|
|
|
3025
3062
|
const sampleText = textSampleAroundMatch(source, source.indexOf(text), text.length);
|
|
3026
3063
|
return sampleText ? [sampleText] : [];
|
|
3027
3064
|
}
|
|
3065
|
+
function textCaseInsensitiveSamples(sample, check) {
|
|
3066
|
+
const source = String(sample || "");
|
|
3067
|
+
const text = check.pattern ? "" : check.text || "";
|
|
3068
|
+
if (!source || !text) return [];
|
|
3069
|
+
const sampleText = textSampleAroundMatch(source, source.toLowerCase().indexOf(text.toLowerCase()), text.length);
|
|
3070
|
+
return sampleText ? [sampleText] : [];
|
|
3071
|
+
}
|
|
3072
|
+
function textCaseInsensitiveSequenceSamples(texts, check) {
|
|
3073
|
+
const text = check.pattern ? "" : compactTextEvidenceSample(check.text || "");
|
|
3074
|
+
if (!text) return [];
|
|
3075
|
+
const expected = text.toLowerCase();
|
|
3076
|
+
return (texts || [])
|
|
3077
|
+
.map((candidate) => compactTextEvidenceSample(candidate))
|
|
3078
|
+
.filter((candidate) => candidate && candidate.toLowerCase().includes(expected))
|
|
3079
|
+
.slice(0, 3)
|
|
3080
|
+
.map((candidate) => candidate.slice(0, 240));
|
|
3081
|
+
}
|
|
3082
|
+
function textCaseInsensitiveFailureSamples(viewport, check) {
|
|
3083
|
+
const key = check.pattern ? "pattern:" + check.pattern + "/" + (check.flags || "") : "text:" + (check.text || "");
|
|
3084
|
+
const captured = viewport && viewport.text_case_insensitive_samples && Array.isArray(viewport.text_case_insensitive_samples[key]) ? viewport.text_case_insensitive_samples[key] : [];
|
|
3085
|
+
const capturedSamples = captured
|
|
3086
|
+
.map((sample) => compactTextEvidenceSample(sample).slice(0, 240))
|
|
3087
|
+
.filter(Boolean);
|
|
3088
|
+
if (capturedSamples.length) return capturedSamples.slice(0, 3);
|
|
3089
|
+
return textCaseInsensitiveSamples(viewport && viewport.body_text_sample || "", check).slice(0, 3);
|
|
3090
|
+
}
|
|
3028
3091
|
function textCheckFailureSamples(viewport, check) {
|
|
3029
3092
|
const key = check.pattern ? "pattern:" + check.pattern + "/" + (check.flags || "") : "text:" + (check.text || "");
|
|
3030
3093
|
const captured = viewport && viewport.text_match_samples && Array.isArray(viewport.text_match_samples[key]) ? viewport.text_match_samples[key] : [];
|
|
@@ -3983,6 +4046,9 @@ function assessProfile(profile, evidence) {
|
|
|
3983
4046
|
const matched = matches.length > 0;
|
|
3984
4047
|
const failedAgainstExpectation = matched !== expectedVisible;
|
|
3985
4048
|
const sampleTexts = matches.length ? matches : failedAgainstExpectation ? texts : [];
|
|
4049
|
+
const caseInsensitiveSamples = failedAgainstExpectation && expectedVisible && !matched
|
|
4050
|
+
? textCaseInsensitiveSequenceSamples(texts, check)
|
|
4051
|
+
: [];
|
|
3986
4052
|
return {
|
|
3987
4053
|
viewport: viewport.name,
|
|
3988
4054
|
selector_count: viewport.selectors && viewport.selectors[selector] ? viewport.selectors[selector].count : 0,
|
|
@@ -3990,6 +4056,7 @@ function assessProfile(profile, evidence) {
|
|
|
3990
4056
|
matched_count: matches.length,
|
|
3991
4057
|
matched,
|
|
3992
4058
|
samples: sampleTexts.slice(0, 3).map((text) => text.slice(0, 240)),
|
|
4059
|
+
case_insensitive_samples: caseInsensitiveSamples,
|
|
3993
4060
|
};
|
|
3994
4061
|
});
|
|
3995
4062
|
const failed = results.filter((result) => result.matched !== expectedVisible).length;
|
|
@@ -4121,6 +4188,9 @@ function assessProfile(profile, evidence) {
|
|
|
4121
4188
|
viewport: viewport.name,
|
|
4122
4189
|
matched,
|
|
4123
4190
|
samples: failedAgainstExpectation ? textCheckFailureSamples(viewport, check) : [],
|
|
4191
|
+
case_insensitive_samples: failedAgainstExpectation && expectedVisible && !matched
|
|
4192
|
+
? textCaseInsensitiveFailureSamples(viewport, check)
|
|
4193
|
+
: [],
|
|
4124
4194
|
};
|
|
4125
4195
|
});
|
|
4126
4196
|
const matches = results.map((result) => result.matched);
|
|
@@ -4510,6 +4580,14 @@ function setupTextMatches(sample, action) {
|
|
|
4510
4580
|
return rawSample.includes(expected)
|
|
4511
4581
|
|| normalizeSetupMatchText(rawSample).includes(normalizeSetupMatchText(expected));
|
|
4512
4582
|
}
|
|
4583
|
+
function setupCaseInsensitiveTextSample(sample, action) {
|
|
4584
|
+
if (!action || action.pattern || !action.text) return "";
|
|
4585
|
+
const normalizedSample = normalizeSetupMatchText(sample);
|
|
4586
|
+
const normalizedExpected = normalizeSetupMatchText(action.text);
|
|
4587
|
+
if (!normalizedSample || !normalizedExpected) return "";
|
|
4588
|
+
if (!normalizedSample.toLowerCase().includes(normalizedExpected.toLowerCase())) return "";
|
|
4589
|
+
return compactSetupResultText(normalizedSample);
|
|
4590
|
+
}
|
|
4513
4591
|
async function waitForAnyVisibleSelector(context, selector, timeout) {
|
|
4514
4592
|
const deadline = Date.now() + setupNumber(timeout, 15000);
|
|
4515
4593
|
let lastReason = "selector_not_found";
|
|
@@ -4956,23 +5034,75 @@ async function executeSetupAction(action, ordinal, viewport) {
|
|
|
4956
5034
|
const requestedSteps = setupNumber(action.steps, 8);
|
|
4957
5035
|
const steps = Math.min(100, Math.max(1, Math.floor(requestedSteps || 8)));
|
|
4958
5036
|
const durationMs = setupNumber(action.duration_ms ?? action.durationMs, 0);
|
|
4959
|
-
|
|
4960
|
-
|
|
4961
|
-
|
|
4962
|
-
|
|
4963
|
-
|
|
4964
|
-
|
|
4965
|
-
|
|
4966
|
-
|
|
4967
|
-
|
|
4968
|
-
|
|
4969
|
-
|
|
5037
|
+
const pointerType = String(action.pointer_type || action.pointerType || "mouse").trim().toLowerCase();
|
|
5038
|
+
if (pointerType === "touch" || pointerType === "pen") {
|
|
5039
|
+
const localStart = {
|
|
5040
|
+
x: coordinate(fromX, box.width),
|
|
5041
|
+
y: coordinate(fromY, box.height),
|
|
5042
|
+
};
|
|
5043
|
+
const localEnd = {
|
|
5044
|
+
x: coordinate(toX, box.width),
|
|
5045
|
+
y: coordinate(toY, box.height),
|
|
5046
|
+
};
|
|
5047
|
+
await target.evaluate(async (element, payload) => {
|
|
5048
|
+
const wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
5049
|
+
const rect = element.getBoundingClientRect();
|
|
5050
|
+
const pointerId = payload.pointerType === "touch" ? 11 : 12;
|
|
5051
|
+
const point = (progress) => ({
|
|
5052
|
+
clientX: rect.left + payload.start.x + (payload.end.x - payload.start.x) * progress,
|
|
5053
|
+
clientY: rect.top + payload.start.y + (payload.end.y - payload.start.y) * progress,
|
|
5054
|
+
});
|
|
5055
|
+
const dispatch = (type, progress) => {
|
|
5056
|
+
const coords = point(progress);
|
|
5057
|
+
element.dispatchEvent(new PointerEvent(type, {
|
|
5058
|
+
bubbles: true,
|
|
5059
|
+
cancelable: true,
|
|
5060
|
+
composed: true,
|
|
5061
|
+
pointerId,
|
|
5062
|
+
pointerType: payload.pointerType,
|
|
5063
|
+
isPrimary: true,
|
|
5064
|
+
buttons: type === "pointerup" ? 0 : 1,
|
|
5065
|
+
button: type === "pointerup" ? 0 : 0,
|
|
5066
|
+
clientX: coords.clientX,
|
|
5067
|
+
clientY: coords.clientY,
|
|
5068
|
+
}));
|
|
5069
|
+
};
|
|
5070
|
+
dispatch("pointerover", 0);
|
|
5071
|
+
dispatch("pointerenter", 0);
|
|
5072
|
+
dispatch("pointerdown", 0);
|
|
5073
|
+
for (let step = 1; step <= payload.steps; step += 1) {
|
|
5074
|
+
dispatch("pointermove", step / payload.steps);
|
|
5075
|
+
if (payload.durationMs && payload.steps > 1) await wait(payload.durationMs / payload.steps);
|
|
4970
5076
|
}
|
|
4971
|
-
|
|
4972
|
-
|
|
5077
|
+
dispatch("pointerup", 1);
|
|
5078
|
+
dispatch("pointerout", 1);
|
|
5079
|
+
dispatch("pointerleave", 1);
|
|
5080
|
+
}, {
|
|
5081
|
+
pointerType,
|
|
5082
|
+
start: localStart,
|
|
5083
|
+
end: localEnd,
|
|
5084
|
+
steps,
|
|
5085
|
+
durationMs,
|
|
5086
|
+
});
|
|
5087
|
+
} else {
|
|
5088
|
+
await page.mouse.move(start.x, start.y);
|
|
5089
|
+
await page.mouse.down();
|
|
5090
|
+
try {
|
|
5091
|
+
if (durationMs && steps > 1) {
|
|
5092
|
+
for (let step = 1; step <= steps; step += 1) {
|
|
5093
|
+
const progress = step / steps;
|
|
5094
|
+
await page.mouse.move(
|
|
5095
|
+
start.x + (end.x - start.x) * progress,
|
|
5096
|
+
start.y + (end.y - start.y) * progress,
|
|
5097
|
+
);
|
|
5098
|
+
await page.waitForTimeout(durationMs / steps);
|
|
5099
|
+
}
|
|
5100
|
+
} else {
|
|
5101
|
+
await page.mouse.move(end.x, end.y, { steps });
|
|
5102
|
+
}
|
|
5103
|
+
} finally {
|
|
5104
|
+
await page.mouse.up().catch(() => {});
|
|
4973
5105
|
}
|
|
4974
|
-
} finally {
|
|
4975
|
-
await page.mouse.up().catch(() => {});
|
|
4976
5106
|
}
|
|
4977
5107
|
return {
|
|
4978
5108
|
...base,
|
|
@@ -4985,6 +5115,7 @@ async function executeSetupAction(action, ordinal, viewport) {
|
|
|
4985
5115
|
from_y: fromY,
|
|
4986
5116
|
to_x: toX,
|
|
4987
5117
|
to_y: toY,
|
|
5118
|
+
pointer_type: pointerType,
|
|
4988
5119
|
steps,
|
|
4989
5120
|
duration_ms: durationMs || undefined,
|
|
4990
5121
|
};
|
|
@@ -5207,6 +5338,7 @@ async function executeSetupAction(action, ordinal, viewport) {
|
|
|
5207
5338
|
if (!count) return { ...base, reason: "selector_not_found", count };
|
|
5208
5339
|
let targetIndex = Number.isInteger(action.index) ? action.index : 0;
|
|
5209
5340
|
let matchedText = null;
|
|
5341
|
+
let caseInsensitiveText = null;
|
|
5210
5342
|
let hiddenMatchIndex = -1;
|
|
5211
5343
|
let hiddenMatchedText = null;
|
|
5212
5344
|
if (action.text || action.pattern) {
|
|
@@ -5224,10 +5356,12 @@ async function executeSetupAction(action, ordinal, viewport) {
|
|
|
5224
5356
|
hiddenMatchIndex = index;
|
|
5225
5357
|
hiddenMatchedText = compactSetupResultText(text);
|
|
5226
5358
|
}
|
|
5359
|
+
} else if (!caseInsensitiveText) {
|
|
5360
|
+
caseInsensitiveText = setupCaseInsensitiveTextSample(text, action) || null;
|
|
5227
5361
|
}
|
|
5228
5362
|
}
|
|
5229
5363
|
if (targetIndex < 0 && hiddenMatchIndex >= 0) return { ...base, reason: "matching_element_not_visible", count, target_index: hiddenMatchIndex, text: hiddenMatchedText };
|
|
5230
|
-
if (targetIndex < 0) return { ...base, reason: "text_not_found", count };
|
|
5364
|
+
if (targetIndex < 0) return { ...base, reason: "text_not_found", count, case_insensitive_text: caseInsensitiveText || undefined };
|
|
5231
5365
|
}
|
|
5232
5366
|
if (targetIndex < 0 || targetIndex >= count) return { ...base, reason: "index_out_of_range", count, target_index: targetIndex };
|
|
5233
5367
|
const clickOptions = action.force === true
|
|
@@ -5271,6 +5405,7 @@ async function executeSetupAction(action, ordinal, viewport) {
|
|
|
5271
5405
|
const locator = scope.context.locator(action.selector);
|
|
5272
5406
|
const startedAt = Date.now();
|
|
5273
5407
|
let lastText = "";
|
|
5408
|
+
let caseInsensitiveText = "";
|
|
5274
5409
|
while (Date.now() - startedAt <= timeout) {
|
|
5275
5410
|
const count = await locator.count().catch(() => 0);
|
|
5276
5411
|
for (let index = 0; index < count; index += 1) {
|
|
@@ -5279,10 +5414,11 @@ async function executeSetupAction(action, ordinal, viewport) {
|
|
|
5279
5414
|
if (setupTextMatches(text, action)) {
|
|
5280
5415
|
return { ...base, ...setupScopeEvidence(scope), ok: true, text: compactSetupResultText(text), target_index: index, timeout_ms: timeout };
|
|
5281
5416
|
}
|
|
5417
|
+
caseInsensitiveText = caseInsensitiveText || setupCaseInsensitiveTextSample(text, action);
|
|
5282
5418
|
}
|
|
5283
5419
|
await page.waitForTimeout(100);
|
|
5284
5420
|
}
|
|
5285
|
-
return { ...base, ...setupScopeEvidence(scope), reason: "text_not_found", text: compactSetupResultText(lastText), timeout_ms: timeout };
|
|
5421
|
+
return { ...base, ...setupScopeEvidence(scope), reason: "text_not_found", text: compactSetupResultText(lastText), case_insensitive_text: caseInsensitiveText || undefined, timeout_ms: timeout };
|
|
5286
5422
|
}
|
|
5287
5423
|
if (type === "assert_text_visible" || type === "assert_text_absent") {
|
|
5288
5424
|
const scope = await setupActionScope(action, timeout);
|
|
@@ -5291,6 +5427,7 @@ async function executeSetupAction(action, ordinal, viewport) {
|
|
|
5291
5427
|
const startedAt = Date.now();
|
|
5292
5428
|
let lastText = "";
|
|
5293
5429
|
let matchedText = "";
|
|
5430
|
+
let caseInsensitiveText = "";
|
|
5294
5431
|
let hiddenMatch = false;
|
|
5295
5432
|
while (Date.now() - startedAt <= timeout) {
|
|
5296
5433
|
const count = await locator.count().catch(() => 0);
|
|
@@ -5313,6 +5450,7 @@ async function executeSetupAction(action, ordinal, viewport) {
|
|
|
5313
5450
|
}
|
|
5314
5451
|
break;
|
|
5315
5452
|
}
|
|
5453
|
+
caseInsensitiveText = caseInsensitiveText || setupCaseInsensitiveTextSample(text, action);
|
|
5316
5454
|
}
|
|
5317
5455
|
if (type === "assert_text_absent" && !matched) {
|
|
5318
5456
|
return { ...base, ...setupScopeEvidence(scope), ok: true, count, timeout_ms: timeout };
|
|
@@ -5323,7 +5461,7 @@ async function executeSetupAction(action, ordinal, viewport) {
|
|
|
5323
5461
|
if (hiddenMatch) {
|
|
5324
5462
|
return { ...base, ...setupScopeEvidence(scope), reason: "matching_element_not_visible", text: compactSetupResultText(matchedText), timeout_ms: timeout };
|
|
5325
5463
|
}
|
|
5326
|
-
return { ...base, ...setupScopeEvidence(scope), reason: "text_not_found", text: compactSetupResultText(lastText), timeout_ms: timeout };
|
|
5464
|
+
return { ...base, ...setupScopeEvidence(scope), reason: "text_not_found", text: compactSetupResultText(lastText), case_insensitive_text: caseInsensitiveText || undefined, timeout_ms: timeout };
|
|
5327
5465
|
}
|
|
5328
5466
|
return { ...base, ...setupScopeEvidence(scope), reason: "text_still_present", text: compactSetupResultText(matchedText || lastText), timeout_ms: timeout };
|
|
5329
5467
|
}
|
|
@@ -6431,6 +6569,7 @@ async function captureViewport(viewport) {
|
|
|
6431
6569
|
const text_sequences = {};
|
|
6432
6570
|
const text_matches = {};
|
|
6433
6571
|
const text_match_samples = {};
|
|
6572
|
+
const text_case_insensitive_samples = {};
|
|
6434
6573
|
const http_statuses = {};
|
|
6435
6574
|
const link_statuses = {};
|
|
6436
6575
|
for (const check of profile.checks || []) {
|
|
@@ -6456,6 +6595,7 @@ async function captureViewport(viewport) {
|
|
|
6456
6595
|
const sample = dom.body_text || dom.body_text_sample || "";
|
|
6457
6596
|
text_matches[key] = textMatches(sample, check);
|
|
6458
6597
|
text_match_samples[key] = textMatchSamples(sample, check);
|
|
6598
|
+
text_case_insensitive_samples[key] = textCaseInsensitiveSamples(sample, check);
|
|
6459
6599
|
}
|
|
6460
6600
|
if ((check.type === "frame_text_visible" || check.type === "frame_url_equals" || check.type === "frame_url_matches" || check.type === "frame_no_horizontal_overflow") && check.selector) {
|
|
6461
6601
|
selectors[check.selector] = selectors[check.selector] || await selectorStats(check.selector);
|
|
@@ -6533,6 +6673,7 @@ async function captureViewport(viewport) {
|
|
|
6533
6673
|
text_sequences,
|
|
6534
6674
|
text_matches,
|
|
6535
6675
|
text_match_samples,
|
|
6676
|
+
text_case_insensitive_samples,
|
|
6536
6677
|
http_statuses,
|
|
6537
6678
|
link_statuses,
|
|
6538
6679
|
route_inventory: routeInventory,
|
package/dist/profile.d.cts
CHANGED
|
@@ -115,6 +115,7 @@ interface RiddleProofProfileSetupAction {
|
|
|
115
115
|
force?: boolean;
|
|
116
116
|
click_count?: number;
|
|
117
117
|
coordinate_mode?: "pixels" | "ratio";
|
|
118
|
+
pointer_type?: "mouse" | "touch" | "pen";
|
|
118
119
|
from_x?: number;
|
|
119
120
|
from_y?: number;
|
|
120
121
|
to_x?: number;
|
|
@@ -308,6 +309,7 @@ interface RiddleProofProfileViewportEvidence {
|
|
|
308
309
|
text_sequences?: Record<string, Record<string, JsonValue>>;
|
|
309
310
|
text_matches?: Record<string, boolean>;
|
|
310
311
|
text_match_samples?: Record<string, string[]>;
|
|
312
|
+
text_case_insensitive_samples?: Record<string, string[]>;
|
|
311
313
|
http_statuses?: Record<string, Record<string, JsonValue>>;
|
|
312
314
|
link_statuses?: Record<string, Record<string, JsonValue>>;
|
|
313
315
|
route_inventory?: Record<string, JsonValue>;
|
package/dist/profile.d.ts
CHANGED
|
@@ -115,6 +115,7 @@ interface RiddleProofProfileSetupAction {
|
|
|
115
115
|
force?: boolean;
|
|
116
116
|
click_count?: number;
|
|
117
117
|
coordinate_mode?: "pixels" | "ratio";
|
|
118
|
+
pointer_type?: "mouse" | "touch" | "pen";
|
|
118
119
|
from_x?: number;
|
|
119
120
|
from_y?: number;
|
|
120
121
|
to_x?: number;
|
|
@@ -308,6 +309,7 @@ interface RiddleProofProfileViewportEvidence {
|
|
|
308
309
|
text_sequences?: Record<string, Record<string, JsonValue>>;
|
|
309
310
|
text_matches?: Record<string, boolean>;
|
|
310
311
|
text_match_samples?: Record<string, string[]>;
|
|
312
|
+
text_case_insensitive_samples?: Record<string, string[]>;
|
|
311
313
|
http_statuses?: Record<string, Record<string, JsonValue>>;
|
|
312
314
|
link_statuses?: Record<string, Record<string, JsonValue>>;
|
|
313
315
|
route_inventory?: Record<string, JsonValue>;
|
package/dist/profile.js
CHANGED
|
@@ -23,7 +23,7 @@ import {
|
|
|
23
23
|
resolveRiddleProofProfileTimeoutSec,
|
|
24
24
|
slugifyRiddleProofProfileName,
|
|
25
25
|
summarizeRiddleProofProfileResult
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-ZYD2SGEM.js";
|
|
27
27
|
export {
|
|
28
28
|
RIDDLE_PROOF_PROFILE_CHECK_TYPES,
|
|
29
29
|
RIDDLE_PROOF_PROFILE_EVIDENCE_VERSION,
|
|
@@ -292,7 +292,7 @@ declare function executeWorkflow(params: WorkflowParams, pluginConfig: any, reso
|
|
|
292
292
|
blocking?: boolean;
|
|
293
293
|
details?: Record<string, unknown>;
|
|
294
294
|
ok: boolean;
|
|
295
|
-
action: "
|
|
295
|
+
action: "recon" | "author" | "ship" | "implement" | "verify" | "setup" | "run";
|
|
296
296
|
state_path: string;
|
|
297
297
|
stage: any;
|
|
298
298
|
summary: string;
|
|
@@ -382,7 +382,7 @@ declare function executeWorkflow(params: WorkflowParams, pluginConfig: any, reso
|
|
|
382
382
|
continueWithStage?: WorkflowStage | null;
|
|
383
383
|
blocking?: boolean;
|
|
384
384
|
details?: Record<string, unknown>;
|
|
385
|
-
action: "
|
|
385
|
+
action: "recon" | "author" | "ship" | "implement" | "verify" | "setup" | "run";
|
|
386
386
|
state_path: string;
|
|
387
387
|
stage: any;
|
|
388
388
|
checkpoint: string;
|
|
@@ -659,7 +659,7 @@ declare function executeWorkflow(params: WorkflowParams, pluginConfig: any, reso
|
|
|
659
659
|
error?: undefined;
|
|
660
660
|
} | {
|
|
661
661
|
ok: boolean;
|
|
662
|
-
action: "
|
|
662
|
+
action: "recon" | "author" | "ship" | "implement" | "verify" | "setup" | "run";
|
|
663
663
|
state_path: string;
|
|
664
664
|
stage: any;
|
|
665
665
|
summary: string;
|
|
@@ -292,7 +292,7 @@ declare function executeWorkflow(params: WorkflowParams, pluginConfig: any, reso
|
|
|
292
292
|
blocking?: boolean;
|
|
293
293
|
details?: Record<string, unknown>;
|
|
294
294
|
ok: boolean;
|
|
295
|
-
action: "
|
|
295
|
+
action: "recon" | "author" | "ship" | "implement" | "verify" | "setup" | "run";
|
|
296
296
|
state_path: string;
|
|
297
297
|
stage: any;
|
|
298
298
|
summary: string;
|
|
@@ -382,7 +382,7 @@ declare function executeWorkflow(params: WorkflowParams, pluginConfig: any, reso
|
|
|
382
382
|
continueWithStage?: WorkflowStage | null;
|
|
383
383
|
blocking?: boolean;
|
|
384
384
|
details?: Record<string, unknown>;
|
|
385
|
-
action: "
|
|
385
|
+
action: "recon" | "author" | "ship" | "implement" | "verify" | "setup" | "run";
|
|
386
386
|
state_path: string;
|
|
387
387
|
stage: any;
|
|
388
388
|
checkpoint: string;
|
|
@@ -659,7 +659,7 @@ declare function executeWorkflow(params: WorkflowParams, pluginConfig: any, reso
|
|
|
659
659
|
error?: undefined;
|
|
660
660
|
} | {
|
|
661
661
|
ok: boolean;
|
|
662
|
-
action: "
|
|
662
|
+
action: "recon" | "author" | "ship" | "implement" | "verify" | "setup" | "run";
|
|
663
663
|
state_path: string;
|
|
664
664
|
stage: any;
|
|
665
665
|
summary: string;
|