@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.
Files changed (127) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/LICENSE +691 -0
  3. package/README.md +152 -2
  4. package/dist/analyze/fixManifest.d.ts +65 -0
  5. package/dist/analyze/fixManifest.d.ts.map +1 -0
  6. package/dist/analyze/fixManifest.js +588 -0
  7. package/dist/analyze/report.d.ts +283 -0
  8. package/dist/analyze/report.d.ts.map +1 -0
  9. package/dist/analyze/report.js +726 -0
  10. package/dist/analyze/reportTier1.d.ts +46 -0
  11. package/dist/analyze/reportTier1.d.ts.map +1 -0
  12. package/dist/analyze/reportTier1.js +251 -0
  13. package/dist/analyze/stack.d.ts +33 -0
  14. package/dist/analyze/stack.d.ts.map +1 -0
  15. package/dist/analyze/stack.js +188 -0
  16. package/dist/analyze/structuredReport.d.ts +62 -0
  17. package/dist/analyze/structuredReport.d.ts.map +1 -0
  18. package/dist/analyze/structuredReport.js +524 -0
  19. package/dist/analyze.d.ts +3 -0
  20. package/dist/analyze.d.ts.map +1 -0
  21. package/dist/analyze.js +40 -0
  22. package/dist/checks/agent-ready.d.ts +63 -0
  23. package/dist/checks/agent-ready.d.ts.map +1 -0
  24. package/dist/checks/agent-ready.js +219 -0
  25. package/dist/checks/analyze.d.ts +15 -0
  26. package/dist/checks/analyze.d.ts.map +1 -0
  27. package/dist/checks/analyze.js +63 -0
  28. package/dist/checks/crawl.d.ts +28 -0
  29. package/dist/checks/crawl.d.ts.map +1 -0
  30. package/dist/checks/crawl.js +86 -0
  31. package/dist/checks/dns.d.ts +25 -0
  32. package/dist/checks/dns.d.ts.map +1 -0
  33. package/dist/checks/dns.js +80 -0
  34. package/dist/checks/index.d.ts +24 -0
  35. package/dist/checks/index.d.ts.map +1 -0
  36. package/dist/checks/index.js +12 -0
  37. package/dist/checks/issues.d.ts +8 -0
  38. package/dist/checks/issues.d.ts.map +1 -0
  39. package/dist/checks/issues.js +3 -0
  40. package/dist/checks/redirect.d.ts +38 -0
  41. package/dist/checks/redirect.d.ts.map +1 -0
  42. package/dist/checks/redirect.js +209 -0
  43. package/dist/checks/registry.d.ts +8 -0
  44. package/dist/checks/registry.d.ts.map +1 -0
  45. package/dist/checks/registry.js +275 -0
  46. package/dist/checks/robots-txt.d.ts +16 -0
  47. package/dist/checks/robots-txt.d.ts.map +1 -0
  48. package/dist/checks/robots-txt.js +99 -0
  49. package/dist/checks/runner.d.ts +9 -0
  50. package/dist/checks/runner.d.ts.map +1 -0
  51. package/dist/checks/runner.js +110 -0
  52. package/dist/checks/security-headers.d.ts +12 -0
  53. package/dist/checks/security-headers.d.ts.map +1 -0
  54. package/dist/checks/security-headers.js +53 -0
  55. package/dist/checks/sitemap.d.ts +36 -0
  56. package/dist/checks/sitemap.d.ts.map +1 -0
  57. package/dist/checks/sitemap.js +140 -0
  58. package/dist/checks/types.d.ts +72 -0
  59. package/dist/checks/types.d.ts.map +1 -0
  60. package/dist/checks/types.js +20 -0
  61. package/dist/cli.d.ts +3 -0
  62. package/dist/cli.d.ts.map +1 -0
  63. package/dist/cli.js +125 -0
  64. package/dist/crawler/checkGroups.d.ts +7 -0
  65. package/dist/crawler/checkGroups.d.ts.map +1 -0
  66. package/dist/crawler/checkGroups.js +29 -0
  67. package/dist/crawler/crawlState.d.ts +7 -0
  68. package/dist/crawler/crawlState.d.ts.map +1 -0
  69. package/dist/crawler/crawlState.js +6 -0
  70. package/dist/crawler/defaults.d.ts +11 -0
  71. package/dist/crawler/defaults.d.ts.map +1 -0
  72. package/dist/crawler/defaults.js +10 -0
  73. package/dist/crawler/extractors.d.ts +5 -0
  74. package/dist/crawler/extractors.d.ts.map +1 -0
  75. package/dist/crawler/extractors.js +169 -0
  76. package/dist/crawler/jsAssets.d.ts +2 -0
  77. package/dist/crawler/jsAssets.d.ts.map +1 -0
  78. package/dist/crawler/jsAssets.js +22 -0
  79. package/dist/crawler/outputPaths.d.ts +14 -0
  80. package/dist/crawler/outputPaths.d.ts.map +1 -0
  81. package/dist/crawler/outputPaths.js +51 -0
  82. package/dist/crawler/reporter.d.ts +3 -0
  83. package/dist/crawler/reporter.d.ts.map +1 -0
  84. package/dist/crawler/reporter.js +12 -0
  85. package/dist/crawler/robots.d.ts +5 -0
  86. package/dist/crawler/robots.d.ts.map +1 -0
  87. package/dist/crawler/robots.js +29 -0
  88. package/dist/crawler/runCrawler.d.ts +22 -0
  89. package/dist/crawler/runCrawler.d.ts.map +1 -0
  90. package/dist/crawler/runCrawler.js +172 -0
  91. package/dist/crawler/schema.d.ts +87 -0
  92. package/dist/crawler/schema.d.ts.map +1 -0
  93. package/dist/crawler/schema.js +44 -0
  94. package/dist/crawler/secrets.d.ts +4 -0
  95. package/dist/crawler/secrets.d.ts.map +1 -0
  96. package/dist/crawler/secrets.js +70 -0
  97. package/dist/crawler/sitemap.d.ts +8 -0
  98. package/dist/crawler/sitemap.d.ts.map +1 -0
  99. package/dist/crawler/sitemap.js +105 -0
  100. package/dist/crawler/stack.d.ts +3 -0
  101. package/dist/crawler/stack.d.ts.map +1 -0
  102. package/dist/crawler/stack.js +1 -0
  103. package/dist/crawler/stackDetect.d.ts +24 -0
  104. package/dist/crawler/stackDetect.d.ts.map +1 -0
  105. package/dist/crawler/stackDetect.js +604 -0
  106. package/dist/crawler/tier1Extractors.d.ts +5 -0
  107. package/dist/crawler/tier1Extractors.d.ts.map +1 -0
  108. package/dist/crawler/tier1Extractors.js +255 -0
  109. package/dist/crawler/tracking.d.ts +8 -0
  110. package/dist/crawler/tracking.d.ts.map +1 -0
  111. package/dist/crawler/tracking.js +50 -0
  112. package/dist/crawler/urlUtils.d.ts +12 -0
  113. package/dist/crawler/urlUtils.d.ts.map +1 -0
  114. package/dist/crawler/urlUtils.js +53 -0
  115. package/dist/index.d.ts +14 -0
  116. package/dist/index.d.ts.map +1 -0
  117. package/dist/index.js +7 -0
  118. package/docs/agent-fixes.md +17 -0
  119. package/docs/agent-ready.md +44 -0
  120. package/docs/analyze.md +103 -0
  121. package/docs/check-api.md +142 -0
  122. package/docs/checks.md +116 -0
  123. package/docs/crawler.md +158 -0
  124. package/docs/index.md +24 -0
  125. package/docs/qc-checks-plan.md +796 -0
  126. package/docs/stack.md +99 -0
  127. package/package.json +86 -4
package/README.md CHANGED
@@ -1,3 +1,153 @@
1
- # Temporary Holding Version
1
+ # Flightcheck
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
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"}