@sudobility/testomniac_runner_service 0.1.74 → 0.1.76

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/dist/analyzer/page-analyzer/generators/login.d.ts +15 -0
  2. package/dist/analyzer/page-analyzer/generators/login.d.ts.map +1 -0
  3. package/dist/analyzer/page-analyzer/generators/login.js +209 -0
  4. package/dist/analyzer/page-analyzer/generators/login.js.map +1 -0
  5. package/dist/analyzer/page-analyzer/index.d.ts.map +1 -1
  6. package/dist/analyzer/page-analyzer/index.js +16 -0
  7. package/dist/analyzer/page-analyzer/index.js.map +1 -1
  8. package/dist/analyzer/page-analyzer/types.d.ts +5 -0
  9. package/dist/analyzer/page-analyzer/types.d.ts.map +1 -1
  10. package/dist/api/client.d.ts +11 -0
  11. package/dist/api/client.d.ts.map +1 -1
  12. package/dist/api/client.js +6 -0
  13. package/dist/api/client.js.map +1 -1
  14. package/dist/crawler/link-extractor.d.ts +1 -1
  15. package/dist/crawler/link-extractor.d.ts.map +1 -1
  16. package/dist/crawler/link-extractor.js +4 -1
  17. package/dist/crawler/link-extractor.js.map +1 -1
  18. package/dist/crawler/scope-checker.d.ts +6 -0
  19. package/dist/crawler/scope-checker.d.ts.map +1 -0
  20. package/dist/crawler/scope-checker.js +14 -0
  21. package/dist/crawler/scope-checker.js.map +1 -0
  22. package/dist/expertise/content-expertise.d.ts +3 -0
  23. package/dist/expertise/content-expertise.d.ts.map +1 -1
  24. package/dist/expertise/content-expertise.js +95 -0
  25. package/dist/expertise/content-expertise.js.map +1 -1
  26. package/dist/expertise/ui-expertise.d.ts +2 -0
  27. package/dist/expertise/ui-expertise.d.ts.map +1 -1
  28. package/dist/expertise/ui-expertise.js +77 -0
  29. package/dist/expertise/ui-expertise.js.map +1 -1
  30. package/dist/index.d.ts +4 -0
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +3 -0
  33. package/dist/index.js.map +1 -1
  34. package/dist/orchestrator/login-manager.d.ts +62 -0
  35. package/dist/orchestrator/login-manager.d.ts.map +1 -0
  36. package/dist/orchestrator/login-manager.js +241 -0
  37. package/dist/orchestrator/login-manager.js.map +1 -0
  38. package/dist/orchestrator/runner.d.ts.map +1 -1
  39. package/dist/orchestrator/runner.js +49 -1
  40. package/dist/orchestrator/runner.js.map +1 -1
  41. package/dist/orchestrator/sso-handler.d.ts +29 -0
  42. package/dist/orchestrator/sso-handler.d.ts.map +1 -0
  43. package/dist/orchestrator/sso-handler.js +223 -0
  44. package/dist/orchestrator/sso-handler.js.map +1 -0
  45. package/dist/orchestrator/test-interaction-executor.d.ts +1 -1
  46. package/dist/orchestrator/test-interaction-executor.d.ts.map +1 -1
  47. package/dist/orchestrator/test-interaction-executor.js +62 -1
  48. package/dist/orchestrator/test-interaction-executor.js.map +1 -1
  49. package/dist/orchestrator/types.d.ts +5 -0
  50. package/dist/orchestrator/types.d.ts.map +1 -1
  51. package/dist/scanner/login-detector.d.ts +25 -0
  52. package/dist/scanner/login-detector.d.ts.map +1 -0
  53. package/dist/scanner/login-detector.js +232 -0
  54. package/dist/scanner/login-detector.js.map +1 -0
  55. package/dist/scanner/page-health-evaluator.d.ts +16 -0
  56. package/dist/scanner/page-health-evaluator.d.ts.map +1 -0
  57. package/dist/scanner/page-health-evaluator.js +222 -0
  58. package/dist/scanner/page-health-evaluator.js.map +1 -0
  59. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"link-extractor.d.ts","sourceRoot":"","sources":["../../src/crawler/link-extractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAOjD,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,aAAa,EAAE,CAAC,CAmC1B"}
1
+ {"version":3,"file":"link-extractor.d.ts","sourceRoot":"","sources":["../../src/crawler/link-extractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAOjD,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,MAAM,EACf,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,aAAa,EAAE,CAAC,CAsC1B"}
@@ -1,5 +1,5 @@
1
1
  import { isSameOrigin, normalizeNavigableUrl, toRelativePath, } from "./url-normalizer";
2
- export async function extractSameOriginLinks(adapter, baseUrl) {
2
+ export async function extractSameOriginLinks(adapter, baseUrl, scanScopePath) {
3
3
  const rawLinks = await adapter.evaluate(() => {
4
4
  return Array.from(document.querySelectorAll("a[href]"))
5
5
  .map(anchor => {
@@ -24,6 +24,9 @@ export async function extractSameOriginLinks(adapter, baseUrl) {
24
24
  continue;
25
25
  }
26
26
  const relativePath = toRelativePath(absoluteUrl);
27
+ if (scanScopePath && !relativePath.startsWith(scanScopePath)) {
28
+ continue;
29
+ }
27
30
  if (!deduped.has(relativePath)) {
28
31
  deduped.set(relativePath, {
29
32
  url: absoluteUrl,
@@ -1 +1 @@
1
- {"version":3,"file":"link-extractor.js","sourceRoot":"","sources":["../../src/crawler/link-extractor.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAQ1B,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAAuB,EACvB,OAAe;IAEf,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE;QAC3C,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;aACpD,GAAG,CAAC,MAAM,CAAC,EAAE;YACZ,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YACzC,IAAI,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC;YACvB,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW;gBAC9B,EAAE,IAAI,EAAE;iBACP,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;iBACpB,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACjB,OAAO;gBACL,IAAI;gBACJ,KAAK,EAAE,KAAK,IAAI,SAAS;aAC1B,CAAC;QACJ,CAAC,CAAC;aACD,MAAM,CAAC,OAAO,CAA4C,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,IAAI,GAAG,EAAyB,CAAC;IACjD,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,MAAM,WAAW,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC9D,IAAI,CAAC,WAAW,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,CAAC;YACxD,SAAS;QACX,CAAC;QACD,MAAM,YAAY,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;QACjD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE;gBACxB,GAAG,EAAE,WAAW;gBAChB,YAAY;gBACZ,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AACtC,CAAC"}
1
+ {"version":3,"file":"link-extractor.js","sourceRoot":"","sources":["../../src/crawler/link-extractor.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAQ1B,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAAuB,EACvB,OAAe,EACf,aAAsB;IAEtB,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE;QAC3C,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;aACpD,GAAG,CAAC,MAAM,CAAC,EAAE;YACZ,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YACzC,IAAI,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC;YACvB,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW;gBAC9B,EAAE,IAAI,EAAE;iBACP,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;iBACpB,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACjB,OAAO;gBACL,IAAI;gBACJ,KAAK,EAAE,KAAK,IAAI,SAAS;aAC1B,CAAC;QACJ,CAAC,CAAC;aACD,MAAM,CAAC,OAAO,CAA4C,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,IAAI,GAAG,EAAyB,CAAC;IACjD,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,MAAM,WAAW,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC9D,IAAI,CAAC,WAAW,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,CAAC;YACxD,SAAS;QACX,CAAC;QACD,MAAM,YAAY,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;QACjD,IAAI,aAAa,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YAC7D,SAAS;QACX,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE;gBACxB,GAAG,EAAE,WAAW;gBAChB,YAAY;gBACZ,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AACtC,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Checks if a URL is within the scan scope path boundary.
3
+ * Returns true if no scanScopePath is set (no restriction).
4
+ */
5
+ export declare function isWithinScopePath(url: string, baseUrl: string, scanScopePath?: string): boolean;
6
+ //# sourceMappingURL=scope-checker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-checker.d.ts","sourceRoot":"","sources":["../../src/crawler/scope-checker.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAKT"}
@@ -0,0 +1,14 @@
1
+ import { isSameOrigin, toRelativePath } from "./url-normalizer";
2
+ /**
3
+ * Checks if a URL is within the scan scope path boundary.
4
+ * Returns true if no scanScopePath is set (no restriction).
5
+ */
6
+ export function isWithinScopePath(url, baseUrl, scanScopePath) {
7
+ if (!scanScopePath)
8
+ return true;
9
+ if (!isSameOrigin(url, baseUrl))
10
+ return false;
11
+ const relativePath = toRelativePath(url);
12
+ return relativePath.startsWith(scanScopePath);
13
+ }
14
+ //# sourceMappingURL=scope-checker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-checker.js","sourceRoot":"","sources":["../../src/crawler/scope-checker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEhE;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,GAAW,EACX,OAAe,EACf,aAAsB;IAEtB,IAAI,CAAC,aAAa;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9C,MAAM,YAAY,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACzC,OAAO,YAAY,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAChD,CAAC"}
@@ -6,6 +6,9 @@ export declare class ContentExpertise implements Expertise {
6
6
  private checkSingleH1;
7
7
  private checkPlaceholderContent;
8
8
  private checkImageAltCoverage;
9
+ private checkBrokenLinkPatterns;
10
+ private checkLabelContextMismatch;
11
+ private checkCurrencyConsistency;
9
12
  private checkLanguageConsistency;
10
13
  }
11
14
  //# sourceMappingURL=content-expertise.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"content-expertise.d.ts","sourceRoot":"","sources":["../../src/expertise/content-expertise.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAWpE,qBAAa,gBAAiB,YAAW,SAAS;IAChD,IAAI,SAAa;IAEjB,QAAQ,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,EAAE;IAY9C,OAAO,CAAC,uBAAuB;IAiB/B,OAAO,CAAC,aAAa;IAyBrB,OAAO,CAAC,uBAAuB;IAyB/B,OAAO,CAAC,qBAAqB;IA4B7B,OAAO,CAAC,wBAAwB;CA0CjC"}
1
+ {"version":3,"file":"content-expertise.d.ts","sourceRoot":"","sources":["../../src/expertise/content-expertise.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAWpE,qBAAa,gBAAiB,YAAW,SAAS;IAChD,IAAI,SAAa;IAEjB,QAAQ,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,EAAE;IAe9C,OAAO,CAAC,uBAAuB;IAiB/B,OAAO,CAAC,aAAa;IAyBrB,OAAO,CAAC,uBAAuB;IAyB/B,OAAO,CAAC,qBAAqB;IA4B7B,OAAO,CAAC,uBAAuB;IAgC/B,OAAO,CAAC,yBAAyB;IAyCjC,OAAO,CAAC,wBAAwB;IA4ChC,OAAO,CAAC,wBAAwB;CA0CjC"}
@@ -15,6 +15,9 @@ export class ContentExpertise {
15
15
  outcomes.push(this.checkPlaceholderContent(context.html));
16
16
  outcomes.push(this.checkImageAltCoverage(context.html));
17
17
  outcomes.push(this.checkLanguageConsistency(context.html));
18
+ outcomes.push(this.checkBrokenLinkPatterns(context.html));
19
+ outcomes.push(this.checkLabelContextMismatch(context.html));
20
+ outcomes.push(this.checkCurrencyConsistency(context.html));
18
21
  return outcomes;
19
22
  }
20
23
  checkMeaningfulBodyText(html) {
@@ -99,6 +102,98 @@ export class ContentExpertise {
99
102
  result: "pass",
100
103
  };
101
104
  }
105
+ checkBrokenLinkPatterns(html) {
106
+ // Check for common URL typos in href attributes
107
+ const hrefMatches = html.match(/\bhref=["']([^"']+)["']/gi) ?? [];
108
+ const suspicious = [];
109
+ for (const match of hrefMatches) {
110
+ const href = match.replace(/^href=["']|["']$/gi, "");
111
+ // Detect doubled path segments (e.g., /stored/ instead of /store/)
112
+ if (/\/stored\//.test(href)) {
113
+ suspicious.push(`"${href}" (likely typo: /stored/ → /store/)`);
114
+ }
115
+ // Detect links pointing to page's own URL (often broken image src or self-reference)
116
+ if (/\bhref=["']#["']/g.test(match) === false) {
117
+ // Check for links that look like they resolve to a product/page slug that doesn't match the link text
118
+ }
119
+ }
120
+ if (suspicious.length > 0) {
121
+ return {
122
+ expected: "Links should not contain URL typos or malformed paths",
123
+ observed: `Found ${suspicious.length} suspicious link(s): ${suspicious.slice(0, 3).join("; ")}`,
124
+ result: "warning",
125
+ };
126
+ }
127
+ return {
128
+ expected: "Links should not contain URL typos or malformed paths",
129
+ observed: "No suspicious link patterns detected",
130
+ result: "pass",
131
+ };
132
+ }
133
+ checkLabelContextMismatch(html) {
134
+ // Detect option labels that don't match the product context
135
+ // e.g., "Select Shirt Size" on a coat/jacket product page
136
+ const mismatches = [];
137
+ // Check for "shirt" labels on non-shirt products
138
+ const h1Content = (html.match(/<h1\b[^>]*>([\s\S]*?)<\/h1>/i)?.[1] ?? "").toLowerCase();
139
+ if (/select\s+shirt\s+size/i.test(html) &&
140
+ !/(shirt|tee|t-shirt|tshirt|blouse)/i.test(h1Content)) {
141
+ const productName = html
142
+ .match(/<h1\b[^>]*>([\s\S]*?)<\/h1>/i)?.[1]
143
+ ?.replace(/<[^>]+>/g, "")
144
+ .trim() ?? "unknown";
145
+ mismatches.push(`"Select Shirt Size" label on "${productName}" product page`);
146
+ }
147
+ // Check for "Select Color" when product name implies specific color
148
+ // (this is acceptable, so not flagged)
149
+ if (mismatches.length > 0) {
150
+ return {
151
+ expected: "Form option labels should match the product context",
152
+ observed: `Label mismatch: ${mismatches.join("; ")}`,
153
+ result: "warning",
154
+ };
155
+ }
156
+ return {
157
+ expected: "Form option labels should match the product context",
158
+ observed: "No label/context mismatches detected",
159
+ result: "pass",
160
+ };
161
+ }
162
+ checkCurrencyConsistency(html) {
163
+ // Check that displayed currency matches the selected currency
164
+ const currencySelect = html
165
+ .match(/<select[^>]*currency[^>]*>[\s\S]*?<option[^>]*selected[^>]*>([^<]+)/i)?.[1]
166
+ ?.trim() ?? null;
167
+ if (!currencySelect) {
168
+ return {
169
+ expected: "Currency display should match selected currency",
170
+ observed: "No currency selector detected",
171
+ result: "pass",
172
+ };
173
+ }
174
+ const text = stripHtml(html);
175
+ const selectedCurrency = currencySelect.toUpperCase();
176
+ // If EUR selected but prices show $, that's a mismatch
177
+ if (selectedCurrency === "EUR" && /\$\d/.test(text) && !/€/.test(text)) {
178
+ return {
179
+ expected: "Currency display should match selected currency",
180
+ observed: `Currency selector shows "${selectedCurrency}" but prices still display with $ symbol`,
181
+ result: "error",
182
+ };
183
+ }
184
+ if (selectedCurrency === "GBP" && /\$\d/.test(text) && !/£/.test(text)) {
185
+ return {
186
+ expected: "Currency display should match selected currency",
187
+ observed: `Currency selector shows "${selectedCurrency}" but prices still display with $ symbol`,
188
+ result: "error",
189
+ };
190
+ }
191
+ return {
192
+ expected: "Currency display should match selected currency",
193
+ observed: "Currency display appears consistent with selector",
194
+ result: "pass",
195
+ };
196
+ }
102
197
  checkLanguageConsistency(html) {
103
198
  const langMatch = html.match(/<html\b[^>]*\blang=["']([^"']+)["']/i);
104
199
  const lang = (langMatch?.[1] ?? "").toLowerCase();
@@ -1 +1 @@
1
- {"version":3,"file":"content-expertise.js","sourceRoot":"","sources":["../../src/expertise/content-expertise.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"content-expertise.js","sourceRoot":"","sources":["../../src/expertise/content-expertise.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,8 @@ export declare class UiExpertise implements Expertise {
5
5
  private checkMainLandmark;
6
6
  private checkScaffoldConsistency;
7
7
  private checkActiveErrorPatterns;
8
+ private checkSocialButtonIntegrity;
9
+ private checkBreadcrumbConsistency;
8
10
  private checkInteractiveDensity;
9
11
  }
10
12
  //# sourceMappingURL=ui-expertise.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ui-expertise.d.ts","sourceRoot":"","sources":["../../src/expertise/ui-expertise.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEpE,qBAAa,WAAY,YAAW,SAAS;IAC3C,IAAI,SAAQ;IAEZ,QAAQ,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,EAAE;IAW9C,OAAO,CAAC,iBAAiB;IAkBzB,OAAO,CAAC,wBAAwB;IAmBhC,OAAO,CAAC,wBAAwB;IAoBhC,OAAO,CAAC,uBAAuB;CAqBhC"}
1
+ {"version":3,"file":"ui-expertise.d.ts","sourceRoot":"","sources":["../../src/expertise/ui-expertise.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEpE,qBAAa,WAAY,YAAW,SAAS;IAC3C,IAAI,SAAQ;IAEZ,QAAQ,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,EAAE;IAa9C,OAAO,CAAC,iBAAiB;IAkBzB,OAAO,CAAC,wBAAwB;IAmBhC,OAAO,CAAC,wBAAwB;IAoBhC,OAAO,CAAC,0BAA0B;IAwDlC,OAAO,CAAC,0BAA0B;IAqClC,OAAO,CAAC,uBAAuB;CAqBhC"}
@@ -6,6 +6,8 @@ export class UiExpertise {
6
6
  outcomes.push(this.checkScaffoldConsistency(context));
7
7
  outcomes.push(this.checkActiveErrorPatterns(context));
8
8
  outcomes.push(this.checkInteractiveDensity(context.html));
9
+ outcomes.push(this.checkSocialButtonIntegrity(context.html));
10
+ outcomes.push(this.checkBreadcrumbConsistency(context.html));
9
11
  return outcomes;
10
12
  }
11
13
  checkMainLandmark(html) {
@@ -54,6 +56,81 @@ export class UiExpertise {
54
56
  result: "pass",
55
57
  };
56
58
  }
59
+ checkSocialButtonIntegrity(html) {
60
+ // Check for social share buttons that are not wrapped in links
61
+ const socialPatterns = [
62
+ /class="[^"]*social[^"]*facebook/gi,
63
+ /class="[^"]*social[^"]*twitter/gi,
64
+ /class="[^"]*social[^"]*linkedin/gi,
65
+ /class="[^"]*social[^"]*pinterest/gi,
66
+ /class="[^"]*social[^"]*email/gi,
67
+ /class="[^"]*social[^"]*myspace/gi,
68
+ ];
69
+ let totalSocial = 0;
70
+ let deadSocial = 0;
71
+ for (const pattern of socialPatterns) {
72
+ const matches = html.match(pattern);
73
+ if (!matches)
74
+ continue;
75
+ for (const match of matches) {
76
+ totalSocial++;
77
+ // Check if the element is a div (not an a tag) — indicates non-functional button
78
+ const tagContext = html.slice(Math.max(0, html.indexOf(match) - 30), html.indexOf(match) + match.length);
79
+ if (/<div\b/i.test(tagContext) && !/<a\b/i.test(tagContext)) {
80
+ deadSocial++;
81
+ }
82
+ }
83
+ }
84
+ if (deadSocial > 0) {
85
+ return {
86
+ expected: "Social share buttons should be functional (links or have click handlers)",
87
+ observed: `${deadSocial} of ${totalSocial} social button(s) appear to be non-functional <div> elements without links`,
88
+ result: "warning",
89
+ };
90
+ }
91
+ if (totalSocial > 0) {
92
+ return {
93
+ expected: "Social share buttons should be functional (links or have click handlers)",
94
+ observed: `All ${totalSocial} social button(s) appear functional`,
95
+ result: "pass",
96
+ };
97
+ }
98
+ return {
99
+ expected: "Social share buttons should be functional (links or have click handlers)",
100
+ observed: "No social share buttons detected",
101
+ result: "pass",
102
+ };
103
+ }
104
+ checkBreadcrumbConsistency(html) {
105
+ // Check breadcrumb navigation for common issues
106
+ const breadcrumbMatch = html.match(/(?:class="[^"]*breadcrumb[^"]*"|nav[^>]*aria-label="[^"]*breadcrumb[^"]*")[^>]*>[\s\S]*?(?:<\/nav>|<\/div>)/i);
107
+ if (!breadcrumbMatch) {
108
+ return {
109
+ expected: "Breadcrumb navigation should be consistent",
110
+ observed: "No breadcrumb navigation detected",
111
+ result: "pass",
112
+ };
113
+ }
114
+ // Check if breadcrumb links point to valid paths
115
+ const breadcrumbHtml = breadcrumbMatch[0];
116
+ const links = breadcrumbHtml.match(/href="([^"]+)"/gi) ?? [];
117
+ const brokenBreadcrumbs = links.filter(link => {
118
+ const href = link.replace(/^href="|"$/g, "");
119
+ return /\/stored\//.test(href) || href === "#";
120
+ });
121
+ if (brokenBreadcrumbs.length > 0) {
122
+ return {
123
+ expected: "Breadcrumb navigation should be consistent",
124
+ observed: `${brokenBreadcrumbs.length} breadcrumb link(s) appear broken or have typos`,
125
+ result: "warning",
126
+ };
127
+ }
128
+ return {
129
+ expected: "Breadcrumb navigation should be consistent",
130
+ observed: "Breadcrumb navigation appears consistent",
131
+ result: "pass",
132
+ };
133
+ }
57
134
  checkInteractiveDensity(html) {
58
135
  const controls = (html.match(/<button\b/gi) ?? []).length +
59
136
  (html.match(/<a\b[^>]*href=/gi) ?? []).length +
@@ -1 +1 @@
1
- {"version":3,"file":"ui-expertise.js","sourceRoot":"","sources":["../../src/expertise/ui-expertise.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ui-expertise.js","sourceRoot":"","sources":["../../src/expertise/ui-expertise.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -41,6 +41,10 @@ export { generateE2ETest, enumerateE2EPaths } from "./generation/e2e";
41
41
  export { runTestRun } from "./orchestrator/runner";
42
42
  export { executeTestInteraction, setClickWaitMs, } from "./orchestrator/test-interaction-executor";
43
43
  export type { RunConfig, ScanEventHandler, ScanResult, } from "./orchestrator/types";
44
+ export { LoginManager, type LoginConfig } from "./orchestrator/login-manager";
45
+ export { evaluatePageHealth, type PageHealthIssue, } from "./scanner/page-health-evaluator";
46
+ export { detectLoginPage, isLoginUrl } from "./scanner/login-detector";
47
+ export type { LoginDetectionResult, SSOButtonInfo, } from "./scanner/login-detector";
44
48
  export { PageAnalyzer, type AnalyzerContext } from "./analyzer";
45
49
  export type { Outcome, ExpertiseContext, Expertise } from "./expertise";
46
50
  export { createExpertises, TesterExpertise, SeoExpertise, SecurityExpertise, PerformanceExpertise, NoopExpertise, createDefaultExpertises, } from "./expertise";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -51,6 +51,9 @@ export { generateE2ETest, enumerateE2EPaths } from "./generation/e2e";
51
51
  // Orchestrator (new)
52
52
  export { runTestRun } from "./orchestrator/runner";
53
53
  export { executeTestInteraction, setClickWaitMs, } from "./orchestrator/test-interaction-executor";
54
+ export { LoginManager } from "./orchestrator/login-manager";
55
+ export { evaluatePageHealth, } from "./scanner/page-health-evaluator";
56
+ export { detectLoginPage, isLoginUrl } from "./scanner/login-detector";
54
57
  // Analyzer
55
58
  export { PageAnalyzer } from "./analyzer";
56
59
  export { createExpertises, TesterExpertise, SeoExpertise, SecurityExpertise, PerformanceExpertise, NoopExpertise, createDefaultExpertises, } from "./expertise";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import type { BrowserAdapter } from "../adapter";
2
+ import type { FormInfo } from "../domain/types";
3
+ import { type SSOButtonInfo } from "../scanner/login-detector";
4
+ export interface LoginConfig {
5
+ /** Explicit login page URL (optional) */
6
+ loginUrl?: string;
7
+ /** Credentials for email/password login */
8
+ email?: string;
9
+ username?: string;
10
+ password?: string;
11
+ twoFactorCode?: string;
12
+ /** Auth provider type (email_password, google, etc.) */
13
+ authProvider?: string;
14
+ }
15
+ export declare class LoginManager {
16
+ private state;
17
+ private adapter;
18
+ private config;
19
+ private baseOrigin;
20
+ constructor(adapter: BrowserAdapter, config: LoginConfig, baseOrigin: string);
21
+ /** Check if currently in a login flow (scope boundary should be suspended) */
22
+ isInLoginFlow(): boolean;
23
+ /** Check if successfully logged in */
24
+ isLoggedIn(): boolean;
25
+ /** Get the login configuration */
26
+ getConfig(): LoginConfig;
27
+ /** Mark login flow as started (suspends scope boundary) */
28
+ beginLoginFlow(): void;
29
+ /** Mark login flow as ended (re-enables scope boundary) */
30
+ endLoginFlow(): void;
31
+ /**
32
+ * Perform initial login before scanning begins.
33
+ * Navigates to login URL if configured, detects the login page, and authenticates.
34
+ */
35
+ performInitialLogin(): Promise<boolean>;
36
+ /**
37
+ * Execute the login based on auth provider type and detected page elements.
38
+ */
39
+ private executeLogin;
40
+ /**
41
+ * Execute email/password login using form fields.
42
+ */
43
+ executeEmailPasswordLogin(form: FormInfo | null): Promise<boolean>;
44
+ /**
45
+ * Execute SSO login by clicking the provider button and completing the flow.
46
+ */
47
+ executeSSOLogin(ssoButton: SSOButtonInfo): Promise<boolean>;
48
+ /**
49
+ * Verify that login was successful by checking the current page
50
+ * is no longer a login page.
51
+ */
52
+ private verifyLoginSuccess;
53
+ /**
54
+ * Detect if the session has expired (redirected to login page).
55
+ */
56
+ detectSessionExpiry(): Promise<boolean>;
57
+ /**
58
+ * Re-login after session expiry.
59
+ */
60
+ reLogin(): Promise<boolean>;
61
+ }
62
+ //# sourceMappingURL=login-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login-manager.d.ts","sourceRoot":"","sources":["../../src/orchestrator/login-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAIL,KAAK,aAAa,EAEnB,MAAM,2BAA2B,CAAC;AAQnC,MAAM,WAAW,WAAW;IAC1B,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wDAAwD;IACxD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAiBD,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,UAAU,CAAS;gBAGzB,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,WAAW,EACnB,UAAU,EAAE,MAAM;IAapB,8EAA8E;IAC9E,aAAa,IAAI,OAAO;IAIxB,sCAAsC;IACtC,UAAU,IAAI,OAAO;IAIrB,kCAAkC;IAClC,SAAS,IAAI,WAAW;IAIxB,2DAA2D;IAC3D,cAAc,IAAI,IAAI;IAKtB,2DAA2D;IAC3D,YAAY,IAAI,IAAI;IAKpB;;;OAGG;IACG,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC;IA4B7C;;OAEG;YACW,YAAY;IAqC1B;;OAEG;IACG,yBAAyB,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;IAiExE;;OAEG;IACG,eAAe,CAAC,SAAS,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IA4BjE;;;OAGG;YACW,kBAAkB;IAchC;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC;IAc7C;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;CA4BlC"}