@validate.qa/runner 1.0.61 → 1.0.63
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/cli.js +145 -14
- package/dist/cli.mjs +145 -14
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -73455,6 +73455,7 @@ var require_inbox_tools = __commonJS({
|
|
|
73455
73455
|
legacyEmail,
|
|
73456
73456
|
tag,
|
|
73457
73457
|
usePlusTag: email !== baseEmail,
|
|
73458
|
+
allowPlainFallback: opts.allowPlainFallback ?? true,
|
|
73458
73459
|
passwordKey: opts.passwordKey ?? "TEST_USER_PASSWORD",
|
|
73459
73460
|
provisioned: false,
|
|
73460
73461
|
// Floor reads at run start so a verification email from a PRIOR run (the
|
|
@@ -73617,6 +73618,9 @@ var require_inbox_tools = __commonJS({
|
|
|
73617
73618
|
const { state: state2 } = ctx;
|
|
73618
73619
|
const plain = args.plain === true || args.plain === "true";
|
|
73619
73620
|
const restore = args.plain === false || args.plain === "false";
|
|
73621
|
+
if (plain && !state2.allowPlainFallback) {
|
|
73622
|
+
return err("The bare inbox address is unavailable for this brokered run because it is shared across projects. Keep using the project-scoped +tag address; if the app rejects plus-addressing, report email verification as blocked.");
|
|
73623
|
+
}
|
|
73620
73624
|
if (plain && state2.usePlusTag) {
|
|
73621
73625
|
state2.email = state2.baseEmail;
|
|
73622
73626
|
state2.usePlusTag = false;
|
|
@@ -75458,7 +75462,10 @@ ${existingScreens.slice(0, 100).map((s) => `- ${s.screenId}${s.name ? ` "${s.nam
|
|
|
75458
75462
|
} else if (registerRequested && ctx.inboxBroker?.address && ctx.inboxBrokerRead) {
|
|
75459
75463
|
inboxState = (0, inbox_tools_js_1.createInboxRunState)({ address: ctx.inboxBroker.address }, {
|
|
75460
75464
|
tagSeed: targetAppId ?? ctx.projectId,
|
|
75461
|
-
projectScope: ctx.projectId
|
|
75465
|
+
projectScope: ctx.projectId,
|
|
75466
|
+
// A user-controlled local runner must never read the shared bare inbox:
|
|
75467
|
+
// only the project-scoped +tag is an authorization boundary.
|
|
75468
|
+
allowPlainFallback: false
|
|
75462
75469
|
});
|
|
75463
75470
|
inboxReader = new brokered_inbox_reader_js_1.BrokeredInboxReader(ctx.inboxBrokerRead);
|
|
75464
75471
|
await (0, inbox_tools_js_1.applyAndPersistInboxIdentity)({
|
|
@@ -320223,6 +320230,9 @@ var require_survey_link_frontier = __commonJS({
|
|
|
320223
320230
|
exports2.markLinkNavigationAttempt = markLinkNavigationAttempt;
|
|
320224
320231
|
exports2.getFinishBlockingFrontier = getFinishBlockingFrontier;
|
|
320225
320232
|
exports2.describeBlockingRoutes = describeBlockingRoutes;
|
|
320233
|
+
exports2.isTransientLanding = isTransientLanding;
|
|
320234
|
+
exports2.getAdaptiveDebtRoutes = getAdaptiveDebtRoutes;
|
|
320235
|
+
exports2.listTransientDebtSuppressions = listTransientDebtSuppressions;
|
|
320226
320236
|
var exploration_state_js_1 = require_exploration_state();
|
|
320227
320237
|
var exploration_parser_js_1 = require_exploration_parser();
|
|
320228
320238
|
exports2.MAX_FINISH_REDIRECTS = 2;
|
|
@@ -320582,6 +320592,132 @@ var require_survey_link_frontier = __commonJS({
|
|
|
320582
320592
|
function describeBlockingRoutes(items, max = 3) {
|
|
320583
320593
|
return items.slice(0, max).map((i) => i.label ? `${i.label} (${i.route})` : i.route).join(", ");
|
|
320584
320594
|
}
|
|
320595
|
+
function isOpaqueToken(v) {
|
|
320596
|
+
if (!v)
|
|
320597
|
+
return false;
|
|
320598
|
+
if (/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(v))
|
|
320599
|
+
return true;
|
|
320600
|
+
if (v.length >= 20 && /^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$/.test(v))
|
|
320601
|
+
return true;
|
|
320602
|
+
if (v.length >= 20 && !/[\s_-]/.test(v) && /[A-Za-z]/.test(v) && /\d/.test(v))
|
|
320603
|
+
return true;
|
|
320604
|
+
if (v.length >= 24 && /^[A-Za-z0-9+/=]+$/.test(v) && /\d/.test(v))
|
|
320605
|
+
return true;
|
|
320606
|
+
return false;
|
|
320607
|
+
}
|
|
320608
|
+
var FLASH_QUERY_KEYS = /* @__PURE__ */ new Set(["toast", "flash", "snackbar"]);
|
|
320609
|
+
var SESSION_TOKEN_QUERY_KEYS = /* @__PURE__ */ new Set([
|
|
320610
|
+
"sid",
|
|
320611
|
+
"sess",
|
|
320612
|
+
"sessid",
|
|
320613
|
+
"session",
|
|
320614
|
+
"sessionid",
|
|
320615
|
+
"jsessionid",
|
|
320616
|
+
"phpsessid"
|
|
320617
|
+
]);
|
|
320618
|
+
var ONE_TIME_TOKEN_QUERY_KEYS = /* @__PURE__ */ new Set([
|
|
320619
|
+
"token",
|
|
320620
|
+
"oobcode",
|
|
320621
|
+
"confirmation_token",
|
|
320622
|
+
"reset_token",
|
|
320623
|
+
"reset_password_token",
|
|
320624
|
+
"verification_token",
|
|
320625
|
+
"activation_token",
|
|
320626
|
+
"invitation_token",
|
|
320627
|
+
"unsubscribe_token"
|
|
320628
|
+
]);
|
|
320629
|
+
var ERROR_PATH_RE = /^\/(?:404|500|503|403|401|error|not[-_]?found|maintenance|oops|unauthorized|forbidden)(?:\/|$)/i;
|
|
320630
|
+
var OAUTH_CALLBACK_PATH_RE = /(?:^|\/)(?:oauth2?\/callback|auth\/callback|sso\/callback|oidc\/callback|signin[-_]oidc|auth\/response)(?:\/|$)/i;
|
|
320631
|
+
var ONE_TIME_PATH_PREFIX_RE = /^\/(?:verify|verify[-_]email|confirm|confirmation|activate|activation|reset[-_]password|password[-_]reset|magic[-_]?link|invitation|invite|unsubscribe|email[-_]confirm)\/([^/?#]+)/i;
|
|
320632
|
+
var INFRA_PATH_RE = /^\/(?:cdn-cgi|__\/auth|\.well-known|_next\/(?:static|data|image)|_nuxt|_vercel)(?:\/|$)/i;
|
|
320633
|
+
var DOWNLOAD_PATH_RE = /(?:^|\/)(?:download|export)\/([^/?#]+)$/i;
|
|
320634
|
+
function isTransientLanding(route2, depth = 0) {
|
|
320635
|
+
if (!route2 || route2 === "/" || depth > 4)
|
|
320636
|
+
return false;
|
|
320637
|
+
let url;
|
|
320638
|
+
try {
|
|
320639
|
+
url = new URL(route2, "http://transient.invalid");
|
|
320640
|
+
} catch {
|
|
320641
|
+
return false;
|
|
320642
|
+
}
|
|
320643
|
+
const path = url.pathname;
|
|
320644
|
+
const params = url.searchParams;
|
|
320645
|
+
if (url.hash.startsWith("#/") && isTransientLanding(url.hash.slice(1), depth + 1))
|
|
320646
|
+
return true;
|
|
320647
|
+
if (ERROR_PATH_RE.test(path))
|
|
320648
|
+
return true;
|
|
320649
|
+
if (INFRA_PATH_RE.test(path))
|
|
320650
|
+
return true;
|
|
320651
|
+
if (OAUTH_CALLBACK_PATH_RE.test(path))
|
|
320652
|
+
return true;
|
|
320653
|
+
if (isOpaqueToken(params.get("code")) && isOpaqueToken(params.get("state")))
|
|
320654
|
+
return true;
|
|
320655
|
+
if (params.has("error") && isOpaqueToken(params.get("state")))
|
|
320656
|
+
return true;
|
|
320657
|
+
if (/[#&?](?:access_token|id_token)=/.test(url.hash) || params.has("access_token") || params.has("id_token")) {
|
|
320658
|
+
return true;
|
|
320659
|
+
}
|
|
320660
|
+
for (const key of params.keys()) {
|
|
320661
|
+
if (FLASH_QUERY_KEYS.has(key.toLowerCase()))
|
|
320662
|
+
return true;
|
|
320663
|
+
}
|
|
320664
|
+
const otPath = ONE_TIME_PATH_PREFIX_RE.exec(path);
|
|
320665
|
+
if (otPath) {
|
|
320666
|
+
let seg = otPath[1];
|
|
320667
|
+
try {
|
|
320668
|
+
seg = decodeURIComponent(seg);
|
|
320669
|
+
} catch {
|
|
320670
|
+
}
|
|
320671
|
+
if (isOpaqueToken(seg))
|
|
320672
|
+
return true;
|
|
320673
|
+
}
|
|
320674
|
+
for (const [key, value] of params) {
|
|
320675
|
+
if (ONE_TIME_TOKEN_QUERY_KEYS.has(key.toLowerCase()) && isOpaqueToken(value))
|
|
320676
|
+
return true;
|
|
320677
|
+
}
|
|
320678
|
+
const dl = DOWNLOAD_PATH_RE.exec(path);
|
|
320679
|
+
if (dl && (/\.[a-z0-9]{2,5}$/i.test(dl[1]) || /\d/.test(dl[1])))
|
|
320680
|
+
return true;
|
|
320681
|
+
for (const [key, value] of params) {
|
|
320682
|
+
if (SESSION_TOKEN_QUERY_KEYS.has(key.toLowerCase()) && isOpaqueToken(value))
|
|
320683
|
+
return true;
|
|
320684
|
+
}
|
|
320685
|
+
return false;
|
|
320686
|
+
}
|
|
320687
|
+
function getAdaptiveDebtRoutes(state2) {
|
|
320688
|
+
const excluded = (r) => {
|
|
320689
|
+
if (r === "/")
|
|
320690
|
+
return true;
|
|
320691
|
+
const item = state2.frontier.get(r);
|
|
320692
|
+
if (item?.source === "link-seen" && item.attempted === true)
|
|
320693
|
+
return true;
|
|
320694
|
+
if (visitedSatisfies(state2, r))
|
|
320695
|
+
return true;
|
|
320696
|
+
if (item?.source !== "link-seen" && isTransientLanding(r))
|
|
320697
|
+
return true;
|
|
320698
|
+
return false;
|
|
320699
|
+
};
|
|
320700
|
+
const ranked = (0, exploration_state_js_1.getRankedFrontier)(state2, { preferShallow: true }).filter((r) => !excluded(r));
|
|
320701
|
+
const rankedSet = new Set(ranked);
|
|
320702
|
+
const navigatedUncaptured = [];
|
|
320703
|
+
for (const r of state2.frontier.keys()) {
|
|
320704
|
+
if (!rankedSet.has(r) && !excluded(r))
|
|
320705
|
+
navigatedUncaptured.push(r);
|
|
320706
|
+
}
|
|
320707
|
+
return ranked.concat(navigatedUncaptured);
|
|
320708
|
+
}
|
|
320709
|
+
function listTransientDebtSuppressions(state2) {
|
|
320710
|
+
const out = [];
|
|
320711
|
+
for (const [r, item] of state2.frontier) {
|
|
320712
|
+
if (r === "/" || item.source === "link-seen")
|
|
320713
|
+
continue;
|
|
320714
|
+
if (visitedSatisfies(state2, r))
|
|
320715
|
+
continue;
|
|
320716
|
+
if (isTransientLanding(r))
|
|
320717
|
+
out.push(r);
|
|
320718
|
+
}
|
|
320719
|
+
return out;
|
|
320720
|
+
}
|
|
320585
320721
|
}
|
|
320586
320722
|
});
|
|
320587
320723
|
|
|
@@ -324659,21 +324795,16 @@ ${inboxPromptBlock}`;
|
|
|
324659
324795
|
let discoveryCreditedThrough = 0;
|
|
324660
324796
|
let adaptiveLastDiscoveryIteration = Number.NEGATIVE_INFINITY;
|
|
324661
324797
|
let adaptiveDiscoveryLeaseUsed = false;
|
|
324798
|
+
let loggedTransientDebtSuppression = false;
|
|
324662
324799
|
const adaptiveDebtRoutes = () => {
|
|
324663
|
-
|
|
324664
|
-
const
|
|
324665
|
-
|
|
324666
|
-
|
|
324667
|
-
|
|
324668
|
-
const ranked = (0, exploration_state_js_1.getRankedFrontier)(state2, { preferShallow: true }).filter((r) => r !== "/" && !isAttemptedLinkEntry(r) && !isSatisfied(r));
|
|
324669
|
-
const rankedSet = new Set(ranked);
|
|
324670
|
-
const navigatedUncaptured = [];
|
|
324671
|
-
for (const r of state2.frontier.keys()) {
|
|
324672
|
-
if (r !== "/" && !rankedSet.has(r) && !isAttemptedLinkEntry(r) && !isSatisfied(r)) {
|
|
324673
|
-
navigatedUncaptured.push(r);
|
|
324800
|
+
if (!loggedTransientDebtSuppression) {
|
|
324801
|
+
const suppressed = (0, survey_link_frontier_js_1.listTransientDebtSuppressions)(state2);
|
|
324802
|
+
if (suppressed.length > 0) {
|
|
324803
|
+
loggedTransientDebtSuppression = true;
|
|
324804
|
+
logs2.push(` [debt-hygiene] excluded ${suppressed.length} transient landing(s) from adaptive debt: ${suppressed.slice(0, 6).join(", ")}${suppressed.length > 6 ? ` \u2026+${suppressed.length - 6}` : ""}`);
|
|
324674
324805
|
}
|
|
324675
324806
|
}
|
|
324676
|
-
return
|
|
324807
|
+
return (0, survey_link_frontier_js_1.getAdaptiveDebtRoutes)(state2);
|
|
324677
324808
|
};
|
|
324678
324809
|
const describeRankedRoutes = (routes, max) => routes.slice(0, max).map((r) => {
|
|
324679
324810
|
const label = state2.frontier.get(r)?.label;
|
|
@@ -350727,7 +350858,7 @@ var require_package4 = __commonJS({
|
|
|
350727
350858
|
"package.json"(exports2, module2) {
|
|
350728
350859
|
module2.exports = {
|
|
350729
350860
|
name: "@validate.qa/runner",
|
|
350730
|
-
version: "1.0.
|
|
350861
|
+
version: "1.0.63",
|
|
350731
350862
|
description: "validate local test runner - execute Playwright tests on your machine, connected to validate.qa cloud.",
|
|
350732
350863
|
bin: {
|
|
350733
350864
|
"validate-runner": "dist/cli.js"
|
package/dist/cli.mjs
CHANGED
|
@@ -73460,6 +73460,7 @@ var require_inbox_tools = __commonJS({
|
|
|
73460
73460
|
legacyEmail,
|
|
73461
73461
|
tag,
|
|
73462
73462
|
usePlusTag: email !== baseEmail,
|
|
73463
|
+
allowPlainFallback: opts.allowPlainFallback ?? true,
|
|
73463
73464
|
passwordKey: opts.passwordKey ?? "TEST_USER_PASSWORD",
|
|
73464
73465
|
provisioned: false,
|
|
73465
73466
|
// Floor reads at run start so a verification email from a PRIOR run (the
|
|
@@ -73622,6 +73623,9 @@ var require_inbox_tools = __commonJS({
|
|
|
73622
73623
|
const { state: state2 } = ctx;
|
|
73623
73624
|
const plain = args.plain === true || args.plain === "true";
|
|
73624
73625
|
const restore = args.plain === false || args.plain === "false";
|
|
73626
|
+
if (plain && !state2.allowPlainFallback) {
|
|
73627
|
+
return err("The bare inbox address is unavailable for this brokered run because it is shared across projects. Keep using the project-scoped +tag address; if the app rejects plus-addressing, report email verification as blocked.");
|
|
73628
|
+
}
|
|
73625
73629
|
if (plain && state2.usePlusTag) {
|
|
73626
73630
|
state2.email = state2.baseEmail;
|
|
73627
73631
|
state2.usePlusTag = false;
|
|
@@ -75463,7 +75467,10 @@ ${existingScreens.slice(0, 100).map((s) => `- ${s.screenId}${s.name ? ` "${s.nam
|
|
|
75463
75467
|
} else if (registerRequested && ctx.inboxBroker?.address && ctx.inboxBrokerRead) {
|
|
75464
75468
|
inboxState = (0, inbox_tools_js_1.createInboxRunState)({ address: ctx.inboxBroker.address }, {
|
|
75465
75469
|
tagSeed: targetAppId ?? ctx.projectId,
|
|
75466
|
-
projectScope: ctx.projectId
|
|
75470
|
+
projectScope: ctx.projectId,
|
|
75471
|
+
// A user-controlled local runner must never read the shared bare inbox:
|
|
75472
|
+
// only the project-scoped +tag is an authorization boundary.
|
|
75473
|
+
allowPlainFallback: false
|
|
75467
75474
|
});
|
|
75468
75475
|
inboxReader = new brokered_inbox_reader_js_1.BrokeredInboxReader(ctx.inboxBrokerRead);
|
|
75469
75476
|
await (0, inbox_tools_js_1.applyAndPersistInboxIdentity)({
|
|
@@ -320228,6 +320235,9 @@ var require_survey_link_frontier = __commonJS({
|
|
|
320228
320235
|
exports.markLinkNavigationAttempt = markLinkNavigationAttempt;
|
|
320229
320236
|
exports.getFinishBlockingFrontier = getFinishBlockingFrontier;
|
|
320230
320237
|
exports.describeBlockingRoutes = describeBlockingRoutes;
|
|
320238
|
+
exports.isTransientLanding = isTransientLanding;
|
|
320239
|
+
exports.getAdaptiveDebtRoutes = getAdaptiveDebtRoutes;
|
|
320240
|
+
exports.listTransientDebtSuppressions = listTransientDebtSuppressions;
|
|
320231
320241
|
var exploration_state_js_1 = require_exploration_state();
|
|
320232
320242
|
var exploration_parser_js_1 = require_exploration_parser();
|
|
320233
320243
|
exports.MAX_FINISH_REDIRECTS = 2;
|
|
@@ -320587,6 +320597,132 @@ var require_survey_link_frontier = __commonJS({
|
|
|
320587
320597
|
function describeBlockingRoutes(items, max = 3) {
|
|
320588
320598
|
return items.slice(0, max).map((i) => i.label ? `${i.label} (${i.route})` : i.route).join(", ");
|
|
320589
320599
|
}
|
|
320600
|
+
function isOpaqueToken(v) {
|
|
320601
|
+
if (!v)
|
|
320602
|
+
return false;
|
|
320603
|
+
if (/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(v))
|
|
320604
|
+
return true;
|
|
320605
|
+
if (v.length >= 20 && /^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$/.test(v))
|
|
320606
|
+
return true;
|
|
320607
|
+
if (v.length >= 20 && !/[\s_-]/.test(v) && /[A-Za-z]/.test(v) && /\d/.test(v))
|
|
320608
|
+
return true;
|
|
320609
|
+
if (v.length >= 24 && /^[A-Za-z0-9+/=]+$/.test(v) && /\d/.test(v))
|
|
320610
|
+
return true;
|
|
320611
|
+
return false;
|
|
320612
|
+
}
|
|
320613
|
+
var FLASH_QUERY_KEYS = /* @__PURE__ */ new Set(["toast", "flash", "snackbar"]);
|
|
320614
|
+
var SESSION_TOKEN_QUERY_KEYS = /* @__PURE__ */ new Set([
|
|
320615
|
+
"sid",
|
|
320616
|
+
"sess",
|
|
320617
|
+
"sessid",
|
|
320618
|
+
"session",
|
|
320619
|
+
"sessionid",
|
|
320620
|
+
"jsessionid",
|
|
320621
|
+
"phpsessid"
|
|
320622
|
+
]);
|
|
320623
|
+
var ONE_TIME_TOKEN_QUERY_KEYS = /* @__PURE__ */ new Set([
|
|
320624
|
+
"token",
|
|
320625
|
+
"oobcode",
|
|
320626
|
+
"confirmation_token",
|
|
320627
|
+
"reset_token",
|
|
320628
|
+
"reset_password_token",
|
|
320629
|
+
"verification_token",
|
|
320630
|
+
"activation_token",
|
|
320631
|
+
"invitation_token",
|
|
320632
|
+
"unsubscribe_token"
|
|
320633
|
+
]);
|
|
320634
|
+
var ERROR_PATH_RE = /^\/(?:404|500|503|403|401|error|not[-_]?found|maintenance|oops|unauthorized|forbidden)(?:\/|$)/i;
|
|
320635
|
+
var OAUTH_CALLBACK_PATH_RE = /(?:^|\/)(?:oauth2?\/callback|auth\/callback|sso\/callback|oidc\/callback|signin[-_]oidc|auth\/response)(?:\/|$)/i;
|
|
320636
|
+
var ONE_TIME_PATH_PREFIX_RE = /^\/(?:verify|verify[-_]email|confirm|confirmation|activate|activation|reset[-_]password|password[-_]reset|magic[-_]?link|invitation|invite|unsubscribe|email[-_]confirm)\/([^/?#]+)/i;
|
|
320637
|
+
var INFRA_PATH_RE = /^\/(?:cdn-cgi|__\/auth|\.well-known|_next\/(?:static|data|image)|_nuxt|_vercel)(?:\/|$)/i;
|
|
320638
|
+
var DOWNLOAD_PATH_RE = /(?:^|\/)(?:download|export)\/([^/?#]+)$/i;
|
|
320639
|
+
function isTransientLanding(route2, depth = 0) {
|
|
320640
|
+
if (!route2 || route2 === "/" || depth > 4)
|
|
320641
|
+
return false;
|
|
320642
|
+
let url;
|
|
320643
|
+
try {
|
|
320644
|
+
url = new URL(route2, "http://transient.invalid");
|
|
320645
|
+
} catch {
|
|
320646
|
+
return false;
|
|
320647
|
+
}
|
|
320648
|
+
const path = url.pathname;
|
|
320649
|
+
const params = url.searchParams;
|
|
320650
|
+
if (url.hash.startsWith("#/") && isTransientLanding(url.hash.slice(1), depth + 1))
|
|
320651
|
+
return true;
|
|
320652
|
+
if (ERROR_PATH_RE.test(path))
|
|
320653
|
+
return true;
|
|
320654
|
+
if (INFRA_PATH_RE.test(path))
|
|
320655
|
+
return true;
|
|
320656
|
+
if (OAUTH_CALLBACK_PATH_RE.test(path))
|
|
320657
|
+
return true;
|
|
320658
|
+
if (isOpaqueToken(params.get("code")) && isOpaqueToken(params.get("state")))
|
|
320659
|
+
return true;
|
|
320660
|
+
if (params.has("error") && isOpaqueToken(params.get("state")))
|
|
320661
|
+
return true;
|
|
320662
|
+
if (/[#&?](?:access_token|id_token)=/.test(url.hash) || params.has("access_token") || params.has("id_token")) {
|
|
320663
|
+
return true;
|
|
320664
|
+
}
|
|
320665
|
+
for (const key of params.keys()) {
|
|
320666
|
+
if (FLASH_QUERY_KEYS.has(key.toLowerCase()))
|
|
320667
|
+
return true;
|
|
320668
|
+
}
|
|
320669
|
+
const otPath = ONE_TIME_PATH_PREFIX_RE.exec(path);
|
|
320670
|
+
if (otPath) {
|
|
320671
|
+
let seg = otPath[1];
|
|
320672
|
+
try {
|
|
320673
|
+
seg = decodeURIComponent(seg);
|
|
320674
|
+
} catch {
|
|
320675
|
+
}
|
|
320676
|
+
if (isOpaqueToken(seg))
|
|
320677
|
+
return true;
|
|
320678
|
+
}
|
|
320679
|
+
for (const [key, value] of params) {
|
|
320680
|
+
if (ONE_TIME_TOKEN_QUERY_KEYS.has(key.toLowerCase()) && isOpaqueToken(value))
|
|
320681
|
+
return true;
|
|
320682
|
+
}
|
|
320683
|
+
const dl = DOWNLOAD_PATH_RE.exec(path);
|
|
320684
|
+
if (dl && (/\.[a-z0-9]{2,5}$/i.test(dl[1]) || /\d/.test(dl[1])))
|
|
320685
|
+
return true;
|
|
320686
|
+
for (const [key, value] of params) {
|
|
320687
|
+
if (SESSION_TOKEN_QUERY_KEYS.has(key.toLowerCase()) && isOpaqueToken(value))
|
|
320688
|
+
return true;
|
|
320689
|
+
}
|
|
320690
|
+
return false;
|
|
320691
|
+
}
|
|
320692
|
+
function getAdaptiveDebtRoutes(state2) {
|
|
320693
|
+
const excluded = (r) => {
|
|
320694
|
+
if (r === "/")
|
|
320695
|
+
return true;
|
|
320696
|
+
const item = state2.frontier.get(r);
|
|
320697
|
+
if (item?.source === "link-seen" && item.attempted === true)
|
|
320698
|
+
return true;
|
|
320699
|
+
if (visitedSatisfies(state2, r))
|
|
320700
|
+
return true;
|
|
320701
|
+
if (item?.source !== "link-seen" && isTransientLanding(r))
|
|
320702
|
+
return true;
|
|
320703
|
+
return false;
|
|
320704
|
+
};
|
|
320705
|
+
const ranked = (0, exploration_state_js_1.getRankedFrontier)(state2, { preferShallow: true }).filter((r) => !excluded(r));
|
|
320706
|
+
const rankedSet = new Set(ranked);
|
|
320707
|
+
const navigatedUncaptured = [];
|
|
320708
|
+
for (const r of state2.frontier.keys()) {
|
|
320709
|
+
if (!rankedSet.has(r) && !excluded(r))
|
|
320710
|
+
navigatedUncaptured.push(r);
|
|
320711
|
+
}
|
|
320712
|
+
return ranked.concat(navigatedUncaptured);
|
|
320713
|
+
}
|
|
320714
|
+
function listTransientDebtSuppressions(state2) {
|
|
320715
|
+
const out = [];
|
|
320716
|
+
for (const [r, item] of state2.frontier) {
|
|
320717
|
+
if (r === "/" || item.source === "link-seen")
|
|
320718
|
+
continue;
|
|
320719
|
+
if (visitedSatisfies(state2, r))
|
|
320720
|
+
continue;
|
|
320721
|
+
if (isTransientLanding(r))
|
|
320722
|
+
out.push(r);
|
|
320723
|
+
}
|
|
320724
|
+
return out;
|
|
320725
|
+
}
|
|
320590
320726
|
}
|
|
320591
320727
|
});
|
|
320592
320728
|
|
|
@@ -324664,21 +324800,16 @@ ${inboxPromptBlock}`;
|
|
|
324664
324800
|
let discoveryCreditedThrough = 0;
|
|
324665
324801
|
let adaptiveLastDiscoveryIteration = Number.NEGATIVE_INFINITY;
|
|
324666
324802
|
let adaptiveDiscoveryLeaseUsed = false;
|
|
324803
|
+
let loggedTransientDebtSuppression = false;
|
|
324667
324804
|
const adaptiveDebtRoutes = () => {
|
|
324668
|
-
|
|
324669
|
-
const
|
|
324670
|
-
|
|
324671
|
-
|
|
324672
|
-
|
|
324673
|
-
const ranked = (0, exploration_state_js_1.getRankedFrontier)(state2, { preferShallow: true }).filter((r) => r !== "/" && !isAttemptedLinkEntry(r) && !isSatisfied(r));
|
|
324674
|
-
const rankedSet = new Set(ranked);
|
|
324675
|
-
const navigatedUncaptured = [];
|
|
324676
|
-
for (const r of state2.frontier.keys()) {
|
|
324677
|
-
if (r !== "/" && !rankedSet.has(r) && !isAttemptedLinkEntry(r) && !isSatisfied(r)) {
|
|
324678
|
-
navigatedUncaptured.push(r);
|
|
324805
|
+
if (!loggedTransientDebtSuppression) {
|
|
324806
|
+
const suppressed = (0, survey_link_frontier_js_1.listTransientDebtSuppressions)(state2);
|
|
324807
|
+
if (suppressed.length > 0) {
|
|
324808
|
+
loggedTransientDebtSuppression = true;
|
|
324809
|
+
logs2.push(` [debt-hygiene] excluded ${suppressed.length} transient landing(s) from adaptive debt: ${suppressed.slice(0, 6).join(", ")}${suppressed.length > 6 ? ` \u2026+${suppressed.length - 6}` : ""}`);
|
|
324679
324810
|
}
|
|
324680
324811
|
}
|
|
324681
|
-
return
|
|
324812
|
+
return (0, survey_link_frontier_js_1.getAdaptiveDebtRoutes)(state2);
|
|
324682
324813
|
};
|
|
324683
324814
|
const describeRankedRoutes = (routes, max) => routes.slice(0, max).map((r) => {
|
|
324684
324815
|
const label = state2.frontier.get(r)?.label;
|
|
@@ -350732,7 +350863,7 @@ var require_package4 = __commonJS({
|
|
|
350732
350863
|
"package.json"(exports, module) {
|
|
350733
350864
|
module.exports = {
|
|
350734
350865
|
name: "@validate.qa/runner",
|
|
350735
|
-
version: "1.0.
|
|
350866
|
+
version: "1.0.63",
|
|
350736
350867
|
description: "validate local test runner - execute Playwright tests on your machine, connected to validate.qa cloud.",
|
|
350737
350868
|
bin: {
|
|
350738
350869
|
"validate-runner": "dist/cli.js"
|
package/package.json
CHANGED