@eightmedia/flightcheck 0.0.0-stage → 1.0.0
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/CHANGELOG.md +16 -0
- package/LICENSE +691 -0
- package/README.md +152 -2
- package/dist/analyze/fixManifest.d.ts +65 -0
- package/dist/analyze/fixManifest.d.ts.map +1 -0
- package/dist/analyze/fixManifest.js +588 -0
- package/dist/analyze/report.d.ts +283 -0
- package/dist/analyze/report.d.ts.map +1 -0
- package/dist/analyze/report.js +726 -0
- package/dist/analyze/reportTier1.d.ts +46 -0
- package/dist/analyze/reportTier1.d.ts.map +1 -0
- package/dist/analyze/reportTier1.js +251 -0
- package/dist/analyze/stack.d.ts +33 -0
- package/dist/analyze/stack.d.ts.map +1 -0
- package/dist/analyze/stack.js +188 -0
- package/dist/analyze/structuredReport.d.ts +62 -0
- package/dist/analyze/structuredReport.d.ts.map +1 -0
- package/dist/analyze/structuredReport.js +524 -0
- package/dist/analyze.d.ts +3 -0
- package/dist/analyze.d.ts.map +1 -0
- package/dist/analyze.js +40 -0
- package/dist/checks/agent-ready.d.ts +63 -0
- package/dist/checks/agent-ready.d.ts.map +1 -0
- package/dist/checks/agent-ready.js +219 -0
- package/dist/checks/analyze.d.ts +15 -0
- package/dist/checks/analyze.d.ts.map +1 -0
- package/dist/checks/analyze.js +63 -0
- package/dist/checks/crawl.d.ts +28 -0
- package/dist/checks/crawl.d.ts.map +1 -0
- package/dist/checks/crawl.js +86 -0
- package/dist/checks/dns.d.ts +25 -0
- package/dist/checks/dns.d.ts.map +1 -0
- package/dist/checks/dns.js +80 -0
- package/dist/checks/index.d.ts +24 -0
- package/dist/checks/index.d.ts.map +1 -0
- package/dist/checks/index.js +12 -0
- package/dist/checks/issues.d.ts +8 -0
- package/dist/checks/issues.d.ts.map +1 -0
- package/dist/checks/issues.js +3 -0
- package/dist/checks/redirect.d.ts +38 -0
- package/dist/checks/redirect.d.ts.map +1 -0
- package/dist/checks/redirect.js +209 -0
- package/dist/checks/registry.d.ts +8 -0
- package/dist/checks/registry.d.ts.map +1 -0
- package/dist/checks/registry.js +275 -0
- package/dist/checks/robots-txt.d.ts +16 -0
- package/dist/checks/robots-txt.d.ts.map +1 -0
- package/dist/checks/robots-txt.js +99 -0
- package/dist/checks/runner.d.ts +9 -0
- package/dist/checks/runner.d.ts.map +1 -0
- package/dist/checks/runner.js +110 -0
- package/dist/checks/security-headers.d.ts +12 -0
- package/dist/checks/security-headers.d.ts.map +1 -0
- package/dist/checks/security-headers.js +53 -0
- package/dist/checks/sitemap.d.ts +36 -0
- package/dist/checks/sitemap.d.ts.map +1 -0
- package/dist/checks/sitemap.js +140 -0
- package/dist/checks/types.d.ts +72 -0
- package/dist/checks/types.d.ts.map +1 -0
- package/dist/checks/types.js +20 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +125 -0
- package/dist/crawler/checkGroups.d.ts +7 -0
- package/dist/crawler/checkGroups.d.ts.map +1 -0
- package/dist/crawler/checkGroups.js +29 -0
- package/dist/crawler/crawlState.d.ts +7 -0
- package/dist/crawler/crawlState.d.ts.map +1 -0
- package/dist/crawler/crawlState.js +6 -0
- package/dist/crawler/defaults.d.ts +11 -0
- package/dist/crawler/defaults.d.ts.map +1 -0
- package/dist/crawler/defaults.js +10 -0
- package/dist/crawler/extractors.d.ts +5 -0
- package/dist/crawler/extractors.d.ts.map +1 -0
- package/dist/crawler/extractors.js +169 -0
- package/dist/crawler/jsAssets.d.ts +2 -0
- package/dist/crawler/jsAssets.d.ts.map +1 -0
- package/dist/crawler/jsAssets.js +22 -0
- package/dist/crawler/outputPaths.d.ts +14 -0
- package/dist/crawler/outputPaths.d.ts.map +1 -0
- package/dist/crawler/outputPaths.js +51 -0
- package/dist/crawler/reporter.d.ts +3 -0
- package/dist/crawler/reporter.d.ts.map +1 -0
- package/dist/crawler/reporter.js +12 -0
- package/dist/crawler/robots.d.ts +5 -0
- package/dist/crawler/robots.d.ts.map +1 -0
- package/dist/crawler/robots.js +29 -0
- package/dist/crawler/runCrawler.d.ts +22 -0
- package/dist/crawler/runCrawler.d.ts.map +1 -0
- package/dist/crawler/runCrawler.js +172 -0
- package/dist/crawler/schema.d.ts +87 -0
- package/dist/crawler/schema.d.ts.map +1 -0
- package/dist/crawler/schema.js +44 -0
- package/dist/crawler/secrets.d.ts +4 -0
- package/dist/crawler/secrets.d.ts.map +1 -0
- package/dist/crawler/secrets.js +70 -0
- package/dist/crawler/sitemap.d.ts +8 -0
- package/dist/crawler/sitemap.d.ts.map +1 -0
- package/dist/crawler/sitemap.js +105 -0
- package/dist/crawler/stack.d.ts +3 -0
- package/dist/crawler/stack.d.ts.map +1 -0
- package/dist/crawler/stack.js +1 -0
- package/dist/crawler/stackDetect.d.ts +24 -0
- package/dist/crawler/stackDetect.d.ts.map +1 -0
- package/dist/crawler/stackDetect.js +604 -0
- package/dist/crawler/tier1Extractors.d.ts +5 -0
- package/dist/crawler/tier1Extractors.d.ts.map +1 -0
- package/dist/crawler/tier1Extractors.js +255 -0
- package/dist/crawler/tracking.d.ts +8 -0
- package/dist/crawler/tracking.d.ts.map +1 -0
- package/dist/crawler/tracking.js +50 -0
- package/dist/crawler/urlUtils.d.ts +12 -0
- package/dist/crawler/urlUtils.d.ts.map +1 -0
- package/dist/crawler/urlUtils.js +53 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/docs/agent-fixes.md +17 -0
- package/docs/agent-ready.md +44 -0
- package/docs/analyze.md +103 -0
- package/docs/check-api.md +142 -0
- package/docs/checks.md +116 -0
- package/docs/crawler.md +158 -0
- package/docs/index.md +24 -0
- package/docs/qc-checks-plan.md +796 -0
- package/docs/stack.md +99 -0
- package/package.json +86 -4
package/README.md
CHANGED
|
@@ -1,3 +1,153 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Flightcheck
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Pre-launch website audit CLI and library.
|
|
4
|
+
|
|
5
|
+
Flightcheck crawls a site and checks what is wrong before go-live: missing meta tags,
|
|
6
|
+
accessibility issues, weak security headers, DNS settings, robots.txt and sitemap
|
|
7
|
+
mismatches, exposed secrets, and more. Every run produces:
|
|
8
|
+
|
|
9
|
+
- crawl data (`*-raw.json`)
|
|
10
|
+
- a structured report (`*-report.json`) — analysis facts + findings
|
|
11
|
+
- a plain-language Markdown report (`*-report.md`) rendered from that JSON
|
|
12
|
+
|
|
13
|
+
## Install
|
|
14
|
+
|
|
15
|
+
In a Node.js project (recommended):
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npm install @eightmedia/flightcheck
|
|
19
|
+
# or: pnpm add @eightmedia/flightcheck
|
|
20
|
+
# or: yarn add @eightmedia/flightcheck
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Requires Node.js 22+. The package is ESM-only (`"type": "module"`).
|
|
24
|
+
|
|
25
|
+
## Use in a Node project
|
|
26
|
+
|
|
27
|
+
### CLI via npm scripts
|
|
28
|
+
|
|
29
|
+
Add scripts to your `package.json`:
|
|
30
|
+
|
|
31
|
+
```json
|
|
32
|
+
{
|
|
33
|
+
"scripts": {
|
|
34
|
+
"flightcheck": "flightcheck",
|
|
35
|
+
"flightcheck:analyze": "flightcheck-analyze"
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Then:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
npm run flightcheck -- https://example.com
|
|
44
|
+
npm run flightcheck:analyze -- ./flightcheck/20260618.1413-example.com-raw.json
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Or call the binaries directly after install:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
npx flightcheck https://example.com
|
|
51
|
+
npx flightcheck-analyze ./flightcheck/20260618.1413-example.com-raw.json
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Without adding it to a project:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
npx @eightmedia/flightcheck https://example.com
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Programmatic API
|
|
61
|
+
|
|
62
|
+
```js
|
|
63
|
+
import { runChecks } from "@eightmedia/flightcheck";
|
|
64
|
+
|
|
65
|
+
const { outputs, results } = await runChecks({
|
|
66
|
+
startUrl: "https://example.com",
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
const report = outputs.analyze?.report;
|
|
70
|
+
console.log(report?.analysis.pagesAnalyzed, report?.findings.length);
|
|
71
|
+
|
|
72
|
+
// Write paths (when analyze ran):
|
|
73
|
+
console.log(outputs.analyze?.reportPath);
|
|
74
|
+
console.log(outputs.analyze?.reportJsonPath);
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Lower-level entry points:
|
|
78
|
+
|
|
79
|
+
```js
|
|
80
|
+
import { runCrawlCheck, runAnalyzeCheck } from "@eightmedia/flightcheck";
|
|
81
|
+
import { listChecks } from "@eightmedia/flightcheck/checks";
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
See [docs/check-api.md](docs/check-api.md) for the modular check API.
|
|
85
|
+
|
|
86
|
+
## How it works
|
|
87
|
+
|
|
88
|
+
1. **Crawl & checks** — pages are scanned and modular checks run (SEO, a11y, security,
|
|
89
|
+
infra, agent readiness).
|
|
90
|
+
2. **Analyze** — issues become a flat `findings[]` list. Each finding has severity,
|
|
91
|
+
category, scope, and a short title/message. Site facts (stack, DNS, …) live under
|
|
92
|
+
`analysis`.
|
|
93
|
+
3. **Reports** — `*-report.json` is the source of truth for tools; `*-report.md` is the
|
|
94
|
+
same data in readable form (grouped by severity for humans).
|
|
95
|
+
|
|
96
|
+
| Output | Audience | Purpose |
|
|
97
|
+
| --- | --- | --- |
|
|
98
|
+
| `*-raw.json` | Machine | Source data from all checks |
|
|
99
|
+
| `*-report.json` | Machine / tools | `analysis` + flat `findings[]` |
|
|
100
|
+
| `*-report.md` | Human | Plain-language report from the JSON |
|
|
101
|
+
|
|
102
|
+
See [docs/analyze.md](docs/analyze.md) for the report schema.
|
|
103
|
+
|
|
104
|
+
## Quick start
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
npm install @eightmedia/flightcheck
|
|
108
|
+
npx flightcheck https://example.com
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
This writes timestamped files in `./flightcheck/`, for example:
|
|
112
|
+
|
|
113
|
+
- `./flightcheck/20260618.1413-example.com-raw.json`
|
|
114
|
+
- `./flightcheck/20260618.1413-example.com-report.json`
|
|
115
|
+
- `./flightcheck/20260618.1413-example.com-report.md`
|
|
116
|
+
|
|
117
|
+
By default this runs all implemented checks: crawl, security headers, DNS, robots.txt,
|
|
118
|
+
sitemap, agent readiness, and analyze. If the start URL is a domain redirect, only
|
|
119
|
+
redirect validation, DNS, and analyze run. Use `--checks crawl` to force a full crawl on
|
|
120
|
+
redirect domains. Use `--checks` for a subset, or `--json-only` for crawl JSON only.
|
|
121
|
+
|
|
122
|
+
Re-analyze an existing crawl without re-crawling:
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
npx flightcheck-analyze ./flightcheck/20260618.1413-example.com-raw.json
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Documentation
|
|
129
|
+
|
|
130
|
+
- [What Flightcheck checks](docs/checks.md) — plain-language checklist
|
|
131
|
+
- [Analyze reports](docs/analyze.md) — `*-report.json` / `*-report.md`
|
|
132
|
+
- [Crawler](docs/crawler.md) — crawl CLI and flags
|
|
133
|
+
- [Check API](docs/check-api.md) — modular checks for developers
|
|
134
|
+
- [Stack detection](docs/stack.md)
|
|
135
|
+
- [Agent readiness](docs/agent-ready.md) — llms.txt, markdown negotiation, …
|
|
136
|
+
- [QC checks plan](docs/qc-checks-plan.md) — roadmap
|
|
137
|
+
- [Docs index](docs/index.md) · [Changelog](CHANGELOG.md)
|
|
138
|
+
|
|
139
|
+
## Development
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
nvm use # see .nvmrc
|
|
143
|
+
pnpm install
|
|
144
|
+
pnpm test
|
|
145
|
+
pnpm build
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## License
|
|
149
|
+
|
|
150
|
+
Flightcheck is licensed under [GNU GPL v3.0](LICENSE). You may use, modify, and
|
|
151
|
+
distribute it under the GPL terms. Derivative works must also be open source under a
|
|
152
|
+
compatible license — it cannot be incorporated into closed-source products without
|
|
153
|
+
complying with the GPL (typically by open-sourcing the combined work).
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { StackProfile } from "./stack.js";
|
|
2
|
+
import type { Tier1ReportData } from "./reportTier1.js";
|
|
3
|
+
import type { ReportRecord } from "./report.js";
|
|
4
|
+
import { defaultManifestPathForInput } from "../crawler/outputPaths.js";
|
|
5
|
+
export declare const FIX_MANIFEST_VERSION: 1;
|
|
6
|
+
export type LocationDiscovery = "search-codebase" | "hosting-panel" | "dns-panel" | "cms-studio" | "manual";
|
|
7
|
+
export type FixSurface = "repo" | "hosting" | "cms" | "dns" | "manual";
|
|
8
|
+
export type ManifestStackEntry = {
|
|
9
|
+
name: string;
|
|
10
|
+
categories: string[];
|
|
11
|
+
confidence: string;
|
|
12
|
+
scope: string;
|
|
13
|
+
evidence: string[];
|
|
14
|
+
};
|
|
15
|
+
export type ManifestIssue = {
|
|
16
|
+
id: string;
|
|
17
|
+
severity: string;
|
|
18
|
+
scope: string;
|
|
19
|
+
count?: number;
|
|
20
|
+
todo: string;
|
|
21
|
+
urls?: string[];
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* A crawled URL that is not a real fixable page (404/401/error — often emails, phone
|
|
25
|
+
* numbers, or dynamic-route placeholders crawled as paths). Surfaced for human review
|
|
26
|
+
* instead of generating "add metadata" todos against pages that do not exist.
|
|
27
|
+
*/
|
|
28
|
+
export type ReviewItem = {
|
|
29
|
+
url: string;
|
|
30
|
+
status: number | null;
|
|
31
|
+
reason: string;
|
|
32
|
+
};
|
|
33
|
+
export type WorkPackage = {
|
|
34
|
+
id: string;
|
|
35
|
+
promptId: string;
|
|
36
|
+
fixSurface: FixSurface;
|
|
37
|
+
priority: number;
|
|
38
|
+
scope: string;
|
|
39
|
+
template?: string;
|
|
40
|
+
issues: ManifestIssue[];
|
|
41
|
+
locationDiscovery: LocationDiscovery;
|
|
42
|
+
searchHints: string[];
|
|
43
|
+
mcpServers: string[];
|
|
44
|
+
prTitle: string;
|
|
45
|
+
autoFixable: boolean;
|
|
46
|
+
};
|
|
47
|
+
export type FixManifest = {
|
|
48
|
+
version: typeof FIX_MANIFEST_VERSION;
|
|
49
|
+
generatedAt: string;
|
|
50
|
+
source: string;
|
|
51
|
+
reportPath: string;
|
|
52
|
+
redirectOnly: boolean;
|
|
53
|
+
stack: ManifestStackEntry[];
|
|
54
|
+
workPackages: WorkPackage[];
|
|
55
|
+
/** Non-200 crawled URLs that should be investigated, not auto-fixed. */
|
|
56
|
+
reviewItems: ReviewItem[];
|
|
57
|
+
};
|
|
58
|
+
export type BuildFixManifestOptions = {
|
|
59
|
+
redirectOnly?: boolean;
|
|
60
|
+
reportPath?: string;
|
|
61
|
+
stackProfile?: StackProfile;
|
|
62
|
+
};
|
|
63
|
+
export declare function buildFixManifest(sourcePath: string, records: ReportRecord[], tier1?: Tier1ReportData, options?: BuildFixManifestOptions): Promise<FixManifest>;
|
|
64
|
+
export { defaultManifestPathForInput };
|
|
65
|
+
//# sourceMappingURL=fixManifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fixManifest.d.ts","sourceRoot":"","sources":["../../src/analyze/fixManifest.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EAAE,2BAA2B,EAA6B,MAAM,2BAA2B,CAAC;AAEnG,eAAO,MAAM,oBAAoB,EAAG,CAAU,CAAC;AAE/C,MAAM,MAAM,iBAAiB,GACzB,iBAAiB,GACjB,eAAe,GACf,WAAW,GACX,YAAY,GACZ,QAAQ,CAAC;AAEb,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,CAAC;AAEvE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,OAAO,oBAAoB,CAAC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,wEAAwE;IACxE,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B,CAAC;AAgnBF,MAAM,MAAM,uBAAuB,GAAG;IACpC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B,CAAC;AAEF,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,YAAY,EAAE,EACvB,KAAK,GAAE,eAAoB,EAC3B,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,WAAW,CAAC,CAyBtB;AAED,OAAO,EAAE,2BAA2B,EAAE,CAAC"}
|