@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.
- package/dist/analyzer/page-analyzer/generators/login.d.ts +15 -0
- package/dist/analyzer/page-analyzer/generators/login.d.ts.map +1 -0
- package/dist/analyzer/page-analyzer/generators/login.js +209 -0
- package/dist/analyzer/page-analyzer/generators/login.js.map +1 -0
- package/dist/analyzer/page-analyzer/index.d.ts.map +1 -1
- package/dist/analyzer/page-analyzer/index.js +16 -0
- package/dist/analyzer/page-analyzer/index.js.map +1 -1
- package/dist/analyzer/page-analyzer/types.d.ts +5 -0
- package/dist/analyzer/page-analyzer/types.d.ts.map +1 -1
- package/dist/api/client.d.ts +11 -0
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +6 -0
- package/dist/api/client.js.map +1 -1
- package/dist/crawler/link-extractor.d.ts +1 -1
- package/dist/crawler/link-extractor.d.ts.map +1 -1
- package/dist/crawler/link-extractor.js +4 -1
- package/dist/crawler/link-extractor.js.map +1 -1
- package/dist/crawler/scope-checker.d.ts +6 -0
- package/dist/crawler/scope-checker.d.ts.map +1 -0
- package/dist/crawler/scope-checker.js +14 -0
- package/dist/crawler/scope-checker.js.map +1 -0
- package/dist/expertise/content-expertise.d.ts +3 -0
- package/dist/expertise/content-expertise.d.ts.map +1 -1
- package/dist/expertise/content-expertise.js +95 -0
- package/dist/expertise/content-expertise.js.map +1 -1
- package/dist/expertise/ui-expertise.d.ts +2 -0
- package/dist/expertise/ui-expertise.d.ts.map +1 -1
- package/dist/expertise/ui-expertise.js +77 -0
- package/dist/expertise/ui-expertise.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/orchestrator/login-manager.d.ts +62 -0
- package/dist/orchestrator/login-manager.d.ts.map +1 -0
- package/dist/orchestrator/login-manager.js +241 -0
- package/dist/orchestrator/login-manager.js.map +1 -0
- package/dist/orchestrator/runner.d.ts.map +1 -1
- package/dist/orchestrator/runner.js +49 -1
- package/dist/orchestrator/runner.js.map +1 -1
- package/dist/orchestrator/sso-handler.d.ts +29 -0
- package/dist/orchestrator/sso-handler.d.ts.map +1 -0
- package/dist/orchestrator/sso-handler.js +223 -0
- package/dist/orchestrator/sso-handler.js.map +1 -0
- package/dist/orchestrator/test-interaction-executor.d.ts +1 -1
- package/dist/orchestrator/test-interaction-executor.d.ts.map +1 -1
- package/dist/orchestrator/test-interaction-executor.js +62 -1
- package/dist/orchestrator/test-interaction-executor.js.map +1 -1
- package/dist/orchestrator/types.d.ts +5 -0
- package/dist/orchestrator/types.d.ts.map +1 -1
- package/dist/scanner/login-detector.d.ts +25 -0
- package/dist/scanner/login-detector.d.ts.map +1 -0
- package/dist/scanner/login-detector.js +232 -0
- package/dist/scanner/login-detector.js.map +1 -0
- package/dist/scanner/page-health-evaluator.d.ts +16 -0
- package/dist/scanner/page-health-evaluator.d.ts.map +1 -0
- package/dist/scanner/page-health-evaluator.js +222 -0
- package/dist/scanner/page-health-evaluator.js.map +1 -0
- 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,
|
|
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;
|
|
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;
|
|
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;
|
|
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":"AAEA,MAAM,OAAO,WAAW;IACtB,IAAI,GAAG,IAAI,CAAC;IAEZ,QAAQ,CAAC,OAAyB;QAChC,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACpD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC,CAAC;QACtD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC,CAAC;QACtD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;
|
|
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";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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":"AACA,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAGlE,cAAc,0BAA0B,CAAC;AAEzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AAGzC,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,qBAAqB,EACrB,yBAAyB,EACzB,iBAAiB,GAClB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,KAAK,sBAAsB,GAC5B,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EACL,MAAM,EACN,aAAa,EACb,kBAAkB,EAClB,aAAa,GACd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG1D,cAAc,aAAa,CAAC;AAG5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AAGvC,cAAc,oBAAoB,CAAC;AAGnC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGvD,OAAO,EACL,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,yBAAyB,EACzB,UAAU,GACX,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,gBAAgB,EAChB,yBAAyB,EACzB,KAAK,gBAAgB,GACtB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EAAE,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EACL,mBAAmB,EACnB,KAAK,gBAAgB,GACtB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,wBAAwB,EACxB,KAAK,gBAAgB,GACtB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChF,OAAO,EACL,kBAAkB,EAClB,KAAK,wBAAwB,GAC9B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EACL,qBAAqB,EACrB,KAAK,uBAAuB,GAC7B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGtE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EACL,sBAAsB,EACtB,cAAc,GACf,MAAM,0CAA0C,CAAC;AAClD,YAAY,EACV,SAAS,EACT,gBAAgB,EAChB,UAAU,GACX,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EACL,kBAAkB,EAClB,KAAK,eAAe,GACrB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACvE,YAAY,EACV,oBAAoB,EACpB,aAAa,GACd,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAGhE,YAAY,EAAE,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,iBAAiB,EACjB,oBAAoB,EACpB,aAAa,EACb,uBAAuB,GACxB,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,MAAM,EACN,aAAa,EACb,YAAY,EACZ,WAAW,GACZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,cAAc,EACd,SAAS,EACT,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC"}
|
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":"AAGA,6BAA6B;AAC7B,cAAc,0BAA0B,CAAC;AACzC,iDAAiD;AACjD,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AAEzC,wBAAwB;AACxB,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,qBAAqB,EACrB,yBAAyB,EACzB,iBAAiB,GAClB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAuB,MAAM,2BAA2B,CAAC;AAC/E,OAAO,EACL,qBAAqB,EACrB,wBAAwB,GAEzB,MAAM,8BAA8B,CAAC;AAEtC,iBAAiB;AACjB,OAAO,EACL,MAAM,EACN,aAAa,EACb,kBAAkB,EAClB,aAAa,GACd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,6BAA6B;AAC7B,cAAc,aAAa,CAAC;AAE5B,eAAe;AACf,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AAEvC,YAAY;AACZ,cAAc,oBAAoB,CAAC;AAEnC,aAAa;AACb,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEvD,mBAAmB;AACnB,OAAO,EACL,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAS3D,iBAAiB;AACjB,OAAO,EACL,gBAAgB,EAChB,yBAAyB,GAE1B,MAAM,+BAA+B,CAAC;AAEvC,WAAW;AACX,OAAO,EAAE,aAAa,EAAwB,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAsB,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAsB,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EACL,mBAAmB,GAEpB,MAAM,sBAAsB,CAAC;AAE9B,mBAAmB;AACnB,OAAO,EACL,wBAAwB,GAEzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChF,OAAO,EACL,kBAAkB,GAEnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EACL,qBAAqB,GAEtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAEtE,qBAAqB;AACrB,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EACL,sBAAsB,EACtB,cAAc,GACf,MAAM,0CAA0C,CAAC;
|
|
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"}
|