@eightmedia/flightcheck 0.0.0-stage → 0.1.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 +15 -0
- package/LICENSE +691 -0
- package/README.md +106 -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,107 @@
|
|
|
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
|
+
```bash
|
|
16
|
+
pnpm add -g @eightmedia/flightcheck
|
|
17
|
+
# or: npm install -g @eightmedia/flightcheck
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Or run without installing:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
pnpm dlx @eightmedia/flightcheck https://example.com
|
|
24
|
+
# or: npx @eightmedia/flightcheck https://example.com
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## How it works
|
|
28
|
+
|
|
29
|
+
1. **Crawl & checks** — pages are scanned and modular checks run (SEO, a11y, security,
|
|
30
|
+
infra, agent readiness).
|
|
31
|
+
2. **Analyze** — issues become a flat `findings[]` list. Each finding has severity,
|
|
32
|
+
category, scope, and a short title/message. Site facts (stack, DNS, …) live under
|
|
33
|
+
`analysis`.
|
|
34
|
+
3. **Reports** — `*-report.json` is the source of truth for tools; `*-report.md` is the
|
|
35
|
+
same data in readable form (grouped by severity for humans).
|
|
36
|
+
|
|
37
|
+
| Output | Audience | Purpose |
|
|
38
|
+
| --- | --- | --- |
|
|
39
|
+
| `*-raw.json` | Machine | Source data from all checks |
|
|
40
|
+
| `*-report.json` | Machine / tools | `analysis` + flat `findings[]` |
|
|
41
|
+
| `*-report.md` | Human | Plain-language report from the JSON |
|
|
42
|
+
|
|
43
|
+
See [docs/analyze.md](docs/analyze.md) for the report schema.
|
|
44
|
+
|
|
45
|
+
## Quick start
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
pnpm add -D @eightmedia/flightcheck
|
|
49
|
+
pnpm exec flightcheck https://example.com
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
This writes timestamped files in `./flightcheck/`, for example:
|
|
53
|
+
|
|
54
|
+
- `./flightcheck/20260618.1413-example.com-raw.json`
|
|
55
|
+
- `./flightcheck/20260618.1413-example.com-report.json`
|
|
56
|
+
- `./flightcheck/20260618.1413-example.com-report.md`
|
|
57
|
+
|
|
58
|
+
By default this runs all implemented checks: crawl, security headers, DNS, robots.txt,
|
|
59
|
+
sitemap, agent readiness, and analyze. If the start URL is a domain redirect, only
|
|
60
|
+
redirect validation, DNS, and analyze run. Use `--checks crawl` to force a full crawl on
|
|
61
|
+
redirect domains. Use `--checks` for a subset, or `--json-only` for crawl JSON only.
|
|
62
|
+
|
|
63
|
+
Re-analyze an existing crawl without re-crawling:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
pnpm exec flightcheck-analyze ./flightcheck/20260618.1413-example.com-raw.json
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Documentation
|
|
70
|
+
|
|
71
|
+
- [What Flightcheck checks](docs/checks.md) — plain-language checklist
|
|
72
|
+
- [Analyze reports](docs/analyze.md) — `*-report.json` / `*-report.md`
|
|
73
|
+
- [Crawler](docs/crawler.md) — crawl CLI and flags
|
|
74
|
+
- [Check API](docs/check-api.md) — modular checks for developers
|
|
75
|
+
- [Stack detection](docs/stack.md)
|
|
76
|
+
- [Agent readiness](docs/agent-ready.md) — llms.txt, markdown negotiation, …
|
|
77
|
+
- [QC checks plan](docs/qc-checks-plan.md) — roadmap
|
|
78
|
+
- [Docs index](docs/index.md) · [Changelog](CHANGELOG.md)
|
|
79
|
+
|
|
80
|
+
## Programmatic API
|
|
81
|
+
|
|
82
|
+
```typescript
|
|
83
|
+
import { runChecks } from "@eightmedia/flightcheck";
|
|
84
|
+
|
|
85
|
+
const { outputs } = await runChecks({
|
|
86
|
+
startUrl: "https://example.com",
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
const report = outputs.analyze?.report;
|
|
90
|
+
// report.analysis.stack, report.findings, …
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Development
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
nvm use # see .nvmrc
|
|
97
|
+
pnpm install
|
|
98
|
+
pnpm test
|
|
99
|
+
pnpm build
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## License
|
|
103
|
+
|
|
104
|
+
Flightcheck is licensed under [GNU GPL v3.0](LICENSE). You may use, modify, and
|
|
105
|
+
distribute it under the GPL terms. Derivative works must also be open source under a
|
|
106
|
+
compatible license — it cannot be incorporated into closed-source products without
|
|
107
|
+
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"}
|