@pseolint/core 0.2.2 → 0.3.1
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/README.md +10 -9
- package/dist/ai/prompt.d.ts +1 -1
- package/dist/ai/prompt.d.ts.map +1 -1
- package/dist/ai/prompt.js +13 -1
- package/dist/ai/prompt.js.map +1 -1
- package/dist/ai/triage.d.ts +15 -1
- package/dist/ai/triage.d.ts.map +1 -1
- package/dist/ai/triage.js +30 -0
- package/dist/ai/triage.js.map +1 -1
- package/dist/analytics-blocklist.d.ts +28 -0
- package/dist/analytics-blocklist.d.ts.map +1 -0
- package/dist/analytics-blocklist.js +129 -0
- package/dist/analytics-blocklist.js.map +1 -0
- package/dist/auditor.d.ts.map +1 -1
- package/dist/auditor.js +130 -46
- package/dist/auditor.js.map +1 -1
- package/dist/formatters/console.d.ts +9 -0
- package/dist/formatters/console.d.ts.map +1 -1
- package/dist/formatters/console.js +53 -0
- package/dist/formatters/console.js.map +1 -1
- package/dist/formatters/html.d.ts.map +1 -1
- package/dist/formatters/html.js +557 -144
- package/dist/formatters/html.js.map +1 -1
- package/dist/index.d.ts +14 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -1
- package/dist/index.js.map +1 -1
- package/dist/renderer.d.ts +14 -0
- package/dist/renderer.d.ts.map +1 -1
- package/dist/renderer.js +130 -4
- package/dist/renderer.js.map +1 -1
- package/dist/rule-references.d.ts.map +1 -1
- package/dist/rule-references.js +9 -0
- package/dist/rule-references.js.map +1 -1
- package/dist/rules/aeo/answer-first.d.ts +18 -0
- package/dist/rules/aeo/answer-first.d.ts.map +1 -0
- package/dist/rules/aeo/answer-first.js +191 -0
- package/dist/rules/aeo/answer-first.js.map +1 -0
- package/dist/rules/aeo/citable-facts.d.ts +9 -0
- package/dist/rules/aeo/citable-facts.d.ts.map +1 -0
- package/dist/rules/aeo/citable-facts.js +90 -0
- package/dist/rules/aeo/citable-facts.js.map +1 -0
- package/dist/rules/aeo/content-modularity.d.ts +11 -0
- package/dist/rules/aeo/content-modularity.d.ts.map +1 -0
- package/dist/rules/aeo/content-modularity.js +107 -0
- package/dist/rules/aeo/content-modularity.js.map +1 -0
- package/dist/rules/aeo/crawler-access.d.ts +25 -0
- package/dist/rules/aeo/crawler-access.d.ts.map +1 -0
- package/dist/rules/aeo/crawler-access.js +116 -0
- package/dist/rules/aeo/crawler-access.js.map +1 -0
- package/dist/rules/aeo/faq-coverage.d.ts +9 -0
- package/dist/rules/aeo/faq-coverage.d.ts.map +1 -0
- package/dist/rules/aeo/faq-coverage.js +71 -0
- package/dist/rules/aeo/faq-coverage.js.map +1 -0
- package/dist/rules/aeo/freshness-signals.d.ts +9 -0
- package/dist/rules/aeo/freshness-signals.d.ts.map +1 -0
- package/dist/rules/aeo/freshness-signals.js +109 -0
- package/dist/rules/aeo/freshness-signals.js.map +1 -0
- package/dist/rules/aeo/llms-txt.d.ts +24 -0
- package/dist/rules/aeo/llms-txt.d.ts.map +1 -0
- package/dist/rules/aeo/llms-txt.js +93 -0
- package/dist/rules/aeo/llms-txt.js.map +1 -0
- package/dist/rules/aeo/non-replicable-value.d.ts +9 -0
- package/dist/rules/aeo/non-replicable-value.d.ts.map +1 -0
- package/dist/rules/aeo/non-replicable-value.js +95 -0
- package/dist/rules/aeo/non-replicable-value.js.map +1 -0
- package/dist/rules/aeo/summary-bait.d.ts +20 -0
- package/dist/rules/aeo/summary-bait.d.ts.map +1 -0
- package/dist/rules/aeo/summary-bait.js +147 -0
- package/dist/rules/aeo/summary-bait.js.map +1 -0
- package/dist/rules/scope.d.ts +12 -0
- package/dist/rules/scope.d.ts.map +1 -0
- package/dist/rules/scope.js +67 -0
- package/dist/rules/scope.js.map +1 -0
- package/dist/types.d.ts +30 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -24,15 +24,16 @@ console.log(`Findings: ${summary.findings.length}`);
|
|
|
24
24
|
|
|
25
25
|
## What It Checks
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
43 rules across 8 categories. Seven categories feed the composite score; `data/*` is a separate data-binding family.
|
|
28
28
|
|
|
29
|
-
- **Spam / SpamBrain risk** — near-duplicate (SimHash), entity-swap doorways, thin content, boilerplate ratio, template diversity, template coverage, publication velocity, doorway pattern
|
|
30
|
-
- **
|
|
31
|
-
- **
|
|
32
|
-
- **
|
|
33
|
-
- **
|
|
34
|
-
- **
|
|
35
|
-
- **
|
|
29
|
+
- **Spam / SpamBrain risk** (8) — near-duplicate (SimHash), entity-swap doorways, thin content, boilerplate ratio, template diversity, template coverage, publication velocity, doorway pattern
|
|
30
|
+
- **Technical SEO** (8) — canonical consistency, canonical/noindex and robots/noindex conflicts, sitemap completeness, robots compliance, redirect chains, soft 404s, Open Graph, hreflang
|
|
31
|
+
- **AEO / AI Overview citability** (9, v0.3.0–v0.3.1) — `llms.txt` presence, AI-crawler access in robots.txt, freshness signals, FAQ coverage, answer-first opener, citable-fact density, non-replicable value, content modularity, **summary-bait** (pages optimized for summarization over retention)
|
|
32
|
+
- **Content** (5) — unique value, heading / meta uniqueness, author attribution, E-E-A-T signals
|
|
33
|
+
- **Internal linking** (5) — orphan pages, dead ends, cluster connectivity, hub pages, link depth
|
|
34
|
+
- **Structured data** (3) — JSON-LD validity, required fields, cross-page schema consistency
|
|
35
|
+
- **Cannibalization** (3) — title overlap, keyword collision, URL pattern conflicts
|
|
36
|
+
- **Data binding** (2) — verify rendered pages expose values from a source dataset (missing or identical-across-pages bindings)
|
|
36
37
|
|
|
37
38
|
## API
|
|
38
39
|
|
|
@@ -118,4 +119,4 @@ All AI providers and `playwright-core` are optional peers — you only install t
|
|
|
118
119
|
|
|
119
120
|
## License
|
|
120
121
|
|
|
121
|
-
MIT
|
|
122
|
+
MIT
|
package/dist/ai/prompt.d.ts
CHANGED
package/dist/ai/prompt.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/ai/prompt.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAY,MAAM,aAAa,CAAC;AAExD,eAAO,MAAM,cAAc,UAAU,CAAC;AACtC,eAAO,MAAM,sBAAsB,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/ai/prompt.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAY,MAAM,aAAa,CAAC;AAExD,eAAO,MAAM,cAAc,UAAU,CAAC;AACtC,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAqB1C,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,CAMrD;AAqBD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,aAAa,CAqC3F"}
|
package/dist/ai/prompt.js
CHANGED
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
|
-
export const PROMPT_VERSION = "1.
|
|
2
|
+
export const PROMPT_VERSION = "1.1.0";
|
|
3
3
|
export const MAX_FINDINGS_IN_PROMPT = 200;
|
|
4
4
|
const SEVERITY_ORDER = { info: 0, warning: 1, error: 2, critical: 3 };
|
|
5
5
|
const SYSTEM_PROMPT = `You are an SEO audit triage assistant. Given a list of pSEO linter findings, identify 1-5 underlying ROOT CAUSES driving the findings. Group findings by shared underlying problem, not by rule ID. Rank causes by likely SEO impact (highest first).
|
|
6
6
|
|
|
7
|
+
Findings fall into two distinct threat families — treat them as separate root causes, not one combined cause:
|
|
8
|
+
- SpamBrain penalty risk: spam/*, cannibal/*, content/*, data/*, tech/*, schema/*, links/* — these make Google penalize or demote the site.
|
|
9
|
+
- AI Overview invisibility: aeo/* — these make pages uncitable in AI answer engines (ChatGPT, Perplexity, Gemini, AI Overviews). Sites not cited lose ~68% of traffic vs ~12% for cited sites.
|
|
10
|
+
|
|
11
|
+
When both families are present, produce at least one root cause from each. Label AEO root causes clearly (e.g. "AI Overviews: ...") so the user can tell them apart from penalty risks.
|
|
12
|
+
|
|
7
13
|
Rules:
|
|
8
14
|
- Emit rootCauses FIRST, then narrative — do not reverse this order.
|
|
9
15
|
- Keep each rootCause label <= 80 chars and phrase it as a problem statement.
|
|
@@ -31,11 +37,17 @@ export function buildPromptRequest(findings, pageCount) {
|
|
|
31
37
|
pageUrl: f.pageUrl,
|
|
32
38
|
group: f.group,
|
|
33
39
|
}));
|
|
40
|
+
const countByCategory = {};
|
|
41
|
+
for (const f of findings) {
|
|
42
|
+
const cat = f.ruleId.split("/")[0];
|
|
43
|
+
countByCategory[cat] = (countByCategory[cat] ?? 0) + 1;
|
|
44
|
+
}
|
|
34
45
|
const payload = {
|
|
35
46
|
totalFindings: total,
|
|
36
47
|
pageCount,
|
|
37
48
|
truncated,
|
|
38
49
|
findings: projected,
|
|
50
|
+
findingCountByCategory: countByCategory,
|
|
39
51
|
};
|
|
40
52
|
if (truncated) {
|
|
41
53
|
const counts = {};
|
package/dist/ai/prompt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/ai/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC;AACtC,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAE1C,MAAM,cAAc,GAA6B,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;AAEhG,MAAM,aAAa,GAAG
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/ai/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC;AACtC,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAE1C,MAAM,cAAc,GAA6B,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;AAEhG,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;sDAegC,CAAC;AAOvD,MAAM,UAAU,eAAe,CAAC,CAAa;IAC3C,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC;SAC9B,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC;SAC3C,MAAM,CAAC,KAAK,CAAC;SACb,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACf,OAAO,GAAG,CAAC,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;AAC/B,CAAC;AAqBD,MAAM,UAAU,kBAAkB,CAAC,QAAsB,EAAE,SAAiB;IAC1E,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC9B,MAAM,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrG,MAAM,SAAS,GAAG,KAAK,GAAG,sBAAsB,CAAC;IACjD,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAqB,EAAE,CAAC,CAAC;QACvF,EAAE,EAAE,eAAe,CAAC,CAAC,CAAC;QACtB,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,KAAK,EAAE,CAAC,CAAC,KAAK;KACf,CAAC,CAAC,CAAC;IAEJ,MAAM,eAAe,GAA2B,EAAE,CAAC;IACnD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,OAAO,GAAkB;QAC7B,aAAa,EAAE,KAAK;QACpB,SAAS;QACT,SAAS;QACT,QAAQ,EAAE,SAAS;QACnB,sBAAsB,EAAE,eAAe;KACxC,CAAC;IAEF,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,KAAK,MAAM,CAAC,IAAI,QAAQ;YAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACzE,OAAO,CAAC,kBAAkB,GAAG,MAAM,CAAC;IACtC,CAAC;IAED,OAAO;QACL,MAAM,EAAE,aAAa;QACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;KAC9B,CAAC;AACJ,CAAC"}
|
package/dist/ai/triage.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type LanguageModel } from "ai";
|
|
2
|
-
import type { RuleResult } from "../types.js";
|
|
2
|
+
import type { RuleResult, AuditSummary } from "../types.js";
|
|
3
3
|
import type { TriageResult } from "./types.js";
|
|
4
4
|
export interface TriageOptions {
|
|
5
5
|
enabled: boolean;
|
|
@@ -25,4 +25,18 @@ export interface TriageOutcome {
|
|
|
25
25
|
skipReason?: string;
|
|
26
26
|
}
|
|
27
27
|
export declare function triageFindings(findings: RuleResult[], pageCount: number, options: TriageOptions): Promise<TriageOutcome>;
|
|
28
|
+
/**
|
|
29
|
+
* High-level triage entry point for server-side callers (e.g. the web API).
|
|
30
|
+
*
|
|
31
|
+
* Unlike `triageFindings`, this function:
|
|
32
|
+
* - Accepts an `AuditSummary` directly.
|
|
33
|
+
* - Resolves the language model automatically via `createLanguageModel`.
|
|
34
|
+
* - Returns a `TriageResult` (throws on skip / error).
|
|
35
|
+
*
|
|
36
|
+
* @param summary - The audit summary to triage.
|
|
37
|
+
* @param opts - Optional overrides: `maxCostUsd` (default 0.5).
|
|
38
|
+
*/
|
|
39
|
+
export declare function triage(summary: AuditSummary, opts?: {
|
|
40
|
+
maxCostUsd?: number;
|
|
41
|
+
}): Promise<TriageResult>;
|
|
28
42
|
//# sourceMappingURL=triage.d.ts.map
|
package/dist/ai/triage.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"triage.d.ts","sourceRoot":"","sources":["../../src/ai/triage.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,IAAI,CAAC;AAExD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"triage.d.ts","sourceRoot":"","sources":["../../src/ai/triage.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,IAAI,CAAC;AAExD,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA4B/C,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,aAAa,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mFAAmF;IACnF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gGAAgG;IAChG,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,KAAK,CAAC;IAC/C,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAeD,wBAAsB,cAAc,CAClC,QAAQ,EAAE,UAAU,EAAE,EACtB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,aAAa,CAAC,CAuHxB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,MAAM,CAC1B,OAAO,EAAE,YAAY,EACrB,IAAI,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7B,OAAO,CAAC,YAAY,CAAC,CAiBvB"}
|
package/dist/ai/triage.js
CHANGED
|
@@ -4,6 +4,7 @@ import { z } from "zod";
|
|
|
4
4
|
import { PROMPT_VERSION, MAX_FINDINGS_IN_PROMPT, assignFindingId, buildPromptRequest, } from "./prompt.js";
|
|
5
5
|
import { readTriageCache, writeTriageCache, triageCacheKey } from "./cache.js";
|
|
6
6
|
import { estimateCostUsd } from "./cost.js";
|
|
7
|
+
import { createLanguageModel } from "./adapters/index.js";
|
|
7
8
|
const SEVERITIES = ["info", "warning", "error", "critical"];
|
|
8
9
|
const rootCauseSchema = z.object({
|
|
9
10
|
label: z.string().min(1).max(80).describe("Short problem statement, <= 80 chars."),
|
|
@@ -133,4 +134,33 @@ export async function triageFindings(findings, pageCount, options) {
|
|
|
133
134
|
}
|
|
134
135
|
return { result };
|
|
135
136
|
}
|
|
137
|
+
/**
|
|
138
|
+
* High-level triage entry point for server-side callers (e.g. the web API).
|
|
139
|
+
*
|
|
140
|
+
* Unlike `triageFindings`, this function:
|
|
141
|
+
* - Accepts an `AuditSummary` directly.
|
|
142
|
+
* - Resolves the language model automatically via `createLanguageModel`.
|
|
143
|
+
* - Returns a `TriageResult` (throws on skip / error).
|
|
144
|
+
*
|
|
145
|
+
* @param summary - The audit summary to triage.
|
|
146
|
+
* @param opts - Optional overrides: `maxCostUsd` (default 0.5).
|
|
147
|
+
*/
|
|
148
|
+
export async function triage(summary, opts) {
|
|
149
|
+
const resolved = await createLanguageModel({});
|
|
150
|
+
const outcome = await triageFindings(summary.findings, summary.pageCount, {
|
|
151
|
+
enabled: true,
|
|
152
|
+
model: resolved.model,
|
|
153
|
+
providerId: resolved.providerId,
|
|
154
|
+
modelId: resolved.modelId,
|
|
155
|
+
maxCostUsd: opts?.maxCostUsd ?? 0.5,
|
|
156
|
+
cache: {
|
|
157
|
+
dir: ".pseolint/ai-cache",
|
|
158
|
+
ttlMs: 30 * 24 * 60 * 60 * 1000,
|
|
159
|
+
},
|
|
160
|
+
});
|
|
161
|
+
if (!outcome.result) {
|
|
162
|
+
throw new Error(outcome.skipReason ?? "triage produced no result");
|
|
163
|
+
}
|
|
164
|
+
return outcome.result;
|
|
165
|
+
}
|
|
136
166
|
//# sourceMappingURL=triage.js.map
|
package/dist/ai/triage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"triage.js","sourceRoot":"","sources":["../../src/ai/triage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,cAAc,EAAsB,MAAM,IAAI,CAAC;AACxD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,eAAe,EACf,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"triage.js","sourceRoot":"","sources":["../../src/ai/triage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Known analytics / product-telemetry / session-replay hostnames.
|
|
3
|
+
*
|
|
4
|
+
* Rendered-mode audits would otherwise fire every client-side beacon on every
|
|
5
|
+
* page they visit, injecting fake sessions into the site owner's dashboards.
|
|
6
|
+
* The renderer intercepts outbound requests and aborts any whose hostname
|
|
7
|
+
* includes one of these tokens (substring match — a single entry covers all
|
|
8
|
+
* regional variants like `www.google-analytics.com`, `www1.google-analytics.com`, …).
|
|
9
|
+
*
|
|
10
|
+
* Conservative on the allow side: we don't block `fonts.googleapis.com`,
|
|
11
|
+
* `gstatic.com`, `cdn.jsdelivr.net`, etc., because they can be legitimate
|
|
12
|
+
* content-rendering dependencies. Errors-in-doubt are logged as warnings at
|
|
13
|
+
* the call site and never throw.
|
|
14
|
+
*/
|
|
15
|
+
export declare const DEFAULT_ANALYTICS_HOSTS: readonly ["google-analytics.com", "googletagmanager.com", "doubleclick.net", "googleadservices.com", "googlesyndication.com", "pagead2.googlesyndication.com", "plausible.io", "umami.is", "umami.app", "fathom.io", "fathomdns.com", "simpleanalytics.com", "simpleanalyticscdn.com", "posthog.com", "mixpanel.com", "segment.com", "segment.io", "amplitude.com", "heap.io", "heapanalytics.com", "pendo.io", "mparticle.com", "rudderlabs.com", "hotjar.com", "fullstory.com", "clarity.ms", "mouseflow.com", "luckyorange.com", "smartlook.com", "logrocket.com", "lr-ingest.com", "sentry.io", "bugsnag.com", "hubspot.com", "hs-analytics.net", "hs-scripts.com", "marketo.com", "marketo.net", "intercom.io", "intercomcdn.com", "cloudflareinsights.com", "vercel-insights.com", "vercel-analytics.com", "matomo.cloud", "matomo.org", "datadoghq.com", "datadoghq.eu", "ddog-gov.com", "newrelic.com", "nr-data.net"];
|
|
16
|
+
/**
|
|
17
|
+
* True when the URL's host contains one of the blocked substrings. In
|
|
18
|
+
* `allow-first-party` mode, same-origin requests are allowed even if the host
|
|
19
|
+
* matches the list (callers pass in the page origin).
|
|
20
|
+
*/
|
|
21
|
+
export declare function isAnalyticsRequest(url: string, options?: {
|
|
22
|
+
pageOrigin?: string;
|
|
23
|
+
blockedHosts?: readonly string[];
|
|
24
|
+
extraBlockedHosts?: readonly string[];
|
|
25
|
+
mode?: "block" | "allow" | "allow-first-party";
|
|
26
|
+
}): boolean;
|
|
27
|
+
export type AnalyticsMode = "block" | "allow" | "allow-first-party";
|
|
28
|
+
//# sourceMappingURL=analytics-blocklist.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics-blocklist.d.ts","sourceRoot":"","sources":["../src/analytics-blocklist.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,uBAAuB,g4BAwE1B,CAAC;AASX;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IACP,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,mBAAmB,CAAC;CAC3C,GACL,OAAO,CAuCT;AAED,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,OAAO,GAAG,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Known analytics / product-telemetry / session-replay hostnames.
|
|
3
|
+
*
|
|
4
|
+
* Rendered-mode audits would otherwise fire every client-side beacon on every
|
|
5
|
+
* page they visit, injecting fake sessions into the site owner's dashboards.
|
|
6
|
+
* The renderer intercepts outbound requests and aborts any whose hostname
|
|
7
|
+
* includes one of these tokens (substring match — a single entry covers all
|
|
8
|
+
* regional variants like `www.google-analytics.com`, `www1.google-analytics.com`, …).
|
|
9
|
+
*
|
|
10
|
+
* Conservative on the allow side: we don't block `fonts.googleapis.com`,
|
|
11
|
+
* `gstatic.com`, `cdn.jsdelivr.net`, etc., because they can be legitimate
|
|
12
|
+
* content-rendering dependencies. Errors-in-doubt are logged as warnings at
|
|
13
|
+
* the call site and never throw.
|
|
14
|
+
*/
|
|
15
|
+
export const DEFAULT_ANALYTICS_HOSTS = [
|
|
16
|
+
// Google stack
|
|
17
|
+
"google-analytics.com",
|
|
18
|
+
"googletagmanager.com",
|
|
19
|
+
"doubleclick.net",
|
|
20
|
+
"googleadservices.com",
|
|
21
|
+
"googlesyndication.com",
|
|
22
|
+
"pagead2.googlesyndication.com",
|
|
23
|
+
// Privacy-focused analytics
|
|
24
|
+
"plausible.io",
|
|
25
|
+
"umami.is",
|
|
26
|
+
"umami.app",
|
|
27
|
+
"fathom.io",
|
|
28
|
+
"fathomdns.com",
|
|
29
|
+
"simpleanalytics.com",
|
|
30
|
+
"simpleanalyticscdn.com",
|
|
31
|
+
// Product analytics
|
|
32
|
+
"posthog.com",
|
|
33
|
+
"mixpanel.com",
|
|
34
|
+
"segment.com",
|
|
35
|
+
"segment.io",
|
|
36
|
+
"amplitude.com",
|
|
37
|
+
"heap.io",
|
|
38
|
+
"heapanalytics.com",
|
|
39
|
+
"pendo.io",
|
|
40
|
+
"mparticle.com",
|
|
41
|
+
"rudderlabs.com",
|
|
42
|
+
// Session replay / heatmaps
|
|
43
|
+
"hotjar.com",
|
|
44
|
+
"fullstory.com",
|
|
45
|
+
"clarity.ms",
|
|
46
|
+
"mouseflow.com",
|
|
47
|
+
"luckyorange.com",
|
|
48
|
+
"smartlook.com",
|
|
49
|
+
"logrocket.com",
|
|
50
|
+
"lr-ingest.com",
|
|
51
|
+
// Error tracking (fires on every page load via init)
|
|
52
|
+
"sentry.io",
|
|
53
|
+
"bugsnag.com",
|
|
54
|
+
// Marketing automation / CDPs
|
|
55
|
+
"hubspot.com",
|
|
56
|
+
"hs-analytics.net",
|
|
57
|
+
"hs-scripts.com",
|
|
58
|
+
"marketo.com",
|
|
59
|
+
"marketo.net",
|
|
60
|
+
// Chat widgets that auto-ping on page view
|
|
61
|
+
"intercom.io",
|
|
62
|
+
"intercomcdn.com",
|
|
63
|
+
// Cloudflare / Vercel analytics
|
|
64
|
+
"cloudflareinsights.com",
|
|
65
|
+
"vercel-insights.com",
|
|
66
|
+
"vercel-analytics.com",
|
|
67
|
+
// Matomo SaaS
|
|
68
|
+
"matomo.cloud",
|
|
69
|
+
"matomo.org",
|
|
70
|
+
// Datadog RUM
|
|
71
|
+
"datadoghq.com",
|
|
72
|
+
"datadoghq.eu",
|
|
73
|
+
"ddog-gov.com",
|
|
74
|
+
// New Relic browser agent
|
|
75
|
+
"newrelic.com",
|
|
76
|
+
"nr-data.net",
|
|
77
|
+
];
|
|
78
|
+
// Pre-lower the default list once at module load — the renderer calls
|
|
79
|
+
// isAnalyticsRequest for every subresource of every rendered page, so avoiding
|
|
80
|
+
// a per-call `.toLowerCase()` of ~40 tokens matters on large audits.
|
|
81
|
+
const DEFAULT_ANALYTICS_HOSTS_LOWER = DEFAULT_ANALYTICS_HOSTS.map((h) => h.toLowerCase());
|
|
82
|
+
/**
|
|
83
|
+
* True when the URL's host contains one of the blocked substrings. In
|
|
84
|
+
* `allow-first-party` mode, same-origin requests are allowed even if the host
|
|
85
|
+
* matches the list (callers pass in the page origin).
|
|
86
|
+
*/
|
|
87
|
+
export function isAnalyticsRequest(url, options = {}) {
|
|
88
|
+
const mode = options.mode ?? "block";
|
|
89
|
+
if (mode === "allow")
|
|
90
|
+
return false;
|
|
91
|
+
let parsed;
|
|
92
|
+
try {
|
|
93
|
+
parsed = new URL(url);
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
if (mode === "allow-first-party" && options.pageOrigin) {
|
|
99
|
+
try {
|
|
100
|
+
const origin = new URL(options.pageOrigin).origin;
|
|
101
|
+
// "null" is the string form of opaque origins (`about:blank`, `data:`)
|
|
102
|
+
// and must never be treated as matching any real origin.
|
|
103
|
+
if (origin !== "null" && parsed.origin !== "null" && parsed.origin === origin) {
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
// fall through — treat as cross-origin
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
const host = parsed.host.toLowerCase();
|
|
112
|
+
// Use the pre-lowered default unless the caller supplied their own list; the
|
|
113
|
+
// caller list is lowered here on the fly (it's small and caller-controlled).
|
|
114
|
+
const base = options.blockedHosts
|
|
115
|
+
? options.blockedHosts.map((h) => h.toLowerCase())
|
|
116
|
+
: DEFAULT_ANALYTICS_HOSTS_LOWER;
|
|
117
|
+
for (const token of base) {
|
|
118
|
+
if (host.includes(token))
|
|
119
|
+
return true;
|
|
120
|
+
}
|
|
121
|
+
if (options.extraBlockedHosts) {
|
|
122
|
+
for (const token of options.extraBlockedHosts) {
|
|
123
|
+
if (host.includes(token.toLowerCase()))
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=analytics-blocklist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics-blocklist.js","sourceRoot":"","sources":["../src/analytics-blocklist.ts"],"names":[],"mappings":"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"}
|
package/dist/auditor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auditor.d.ts","sourceRoot":"","sources":["../src/auditor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auditor.d.ts","sourceRoot":"","sources":["../src/auditor.ts"],"names":[],"mappings":"AA8DA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAwG,MAAM,YAAY,CAAC;AA+0BnK,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAgf/F"}
|