insa-check-core 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.
Files changed (258) hide show
  1. package/LICENSE +24 -0
  2. package/dist/annex-b.d.ts +6 -0
  3. package/dist/annex-b.d.ts.map +1 -0
  4. package/dist/annex-b.js +152 -0
  5. package/dist/annex-b.js.map +1 -0
  6. package/dist/checks/content/page.d.ts +7 -0
  7. package/dist/checks/content/page.d.ts.map +1 -0
  8. package/dist/checks/content/page.js +133 -0
  9. package/dist/checks/content/page.js.map +1 -0
  10. package/dist/checks/cookies/cookie-flags.d.ts +3 -0
  11. package/dist/checks/cookies/cookie-flags.d.ts.map +1 -0
  12. package/dist/checks/cookies/cookie-flags.js +41 -0
  13. package/dist/checks/cookies/cookie-flags.js.map +1 -0
  14. package/dist/checks/cookies/cookie-scope.d.ts +6 -0
  15. package/dist/checks/cookies/cookie-scope.d.ts.map +1 -0
  16. package/dist/checks/cookies/cookie-scope.js +60 -0
  17. package/dist/checks/cookies/cookie-scope.js.map +1 -0
  18. package/dist/checks/deployment/server-banner.d.ts +4 -0
  19. package/dist/checks/deployment/server-banner.d.ts.map +1 -0
  20. package/dist/checks/deployment/server-banner.js +60 -0
  21. package/dist/checks/deployment/server-banner.js.map +1 -0
  22. package/dist/checks/deployment/trace.d.ts +3 -0
  23. package/dist/checks/deployment/trace.d.ts.map +1 -0
  24. package/dist/checks/deployment/trace.js +30 -0
  25. package/dist/checks/deployment/trace.js.map +1 -0
  26. package/dist/checks/headers/clickjacking.d.ts +5 -0
  27. package/dist/checks/headers/clickjacking.d.ts.map +1 -0
  28. package/dist/checks/headers/clickjacking.js +57 -0
  29. package/dist/checks/headers/clickjacking.js.map +1 -0
  30. package/dist/checks/headers/content-type-options.d.ts +3 -0
  31. package/dist/checks/headers/content-type-options.d.ts.map +1 -0
  32. package/dist/checks/headers/content-type-options.js +17 -0
  33. package/dist/checks/headers/content-type-options.js.map +1 -0
  34. package/dist/checks/headers/cors.d.ts +4 -0
  35. package/dist/checks/headers/cors.d.ts.map +1 -0
  36. package/dist/checks/headers/cors.js +38 -0
  37. package/dist/checks/headers/cors.js.map +1 -0
  38. package/dist/checks/html.d.ts +11 -0
  39. package/dist/checks/html.d.ts.map +1 -0
  40. package/dist/checks/html.js +30 -0
  41. package/dist/checks/html.js.map +1 -0
  42. package/dist/checks/index.d.ts +7 -0
  43. package/dist/checks/index.d.ts.map +1 -0
  44. package/dist/checks/index.js +48 -0
  45. package/dist/checks/index.js.map +1 -0
  46. package/dist/checks/info-disclosure/directory-listing.d.ts +6 -0
  47. package/dist/checks/info-disclosure/directory-listing.d.ts.map +1 -0
  48. package/dist/checks/info-disclosure/directory-listing.js +60 -0
  49. package/dist/checks/info-disclosure/directory-listing.js.map +1 -0
  50. package/dist/checks/info-disclosure/exposed-files.d.ts +4 -0
  51. package/dist/checks/info-disclosure/exposed-files.d.ts.map +1 -0
  52. package/dist/checks/info-disclosure/exposed-files.js +56 -0
  53. package/dist/checks/info-disclosure/exposed-files.js.map +1 -0
  54. package/dist/checks/info-disclosure/more.d.ts +8 -0
  55. package/dist/checks/info-disclosure/more.d.ts.map +1 -0
  56. package/dist/checks/info-disclosure/more.js +186 -0
  57. package/dist/checks/info-disclosure/more.js.map +1 -0
  58. package/dist/checks/tls/certificate.d.ts +3 -0
  59. package/dist/checks/tls/certificate.d.ts.map +1 -0
  60. package/dist/checks/tls/certificate.js +49 -0
  61. package/dist/checks/tls/certificate.js.map +1 -0
  62. package/dist/checks/tls/hsts.d.ts +5 -0
  63. package/dist/checks/tls/hsts.d.ts.map +1 -0
  64. package/dist/checks/tls/hsts.js +35 -0
  65. package/dist/checks/tls/hsts.js.map +1 -0
  66. package/dist/checks/tls/https-redirect.d.ts +3 -0
  67. package/dist/checks/tls/https-redirect.d.ts.map +1 -0
  68. package/dist/checks/tls/https-redirect.js +46 -0
  69. package/dist/checks/tls/https-redirect.js.map +1 -0
  70. package/dist/checks/tls/legacy-protocols.d.ts +3 -0
  71. package/dist/checks/tls/legacy-protocols.d.ts.map +1 -0
  72. package/dist/checks/tls/legacy-protocols.js +27 -0
  73. package/dist/checks/tls/legacy-protocols.js.map +1 -0
  74. package/dist/checks/util.d.ts +22 -0
  75. package/dist/checks/util.d.ts.map +1 -0
  76. package/dist/checks/util.js +63 -0
  77. package/dist/checks/util.js.map +1 -0
  78. package/dist/code/checks/crypto.d.ts +5 -0
  79. package/dist/code/checks/crypto.d.ts.map +1 -0
  80. package/dist/code/checks/crypto.js +100 -0
  81. package/dist/code/checks/crypto.js.map +1 -0
  82. package/dist/code/checks/django.d.ts +14 -0
  83. package/dist/code/checks/django.d.ts.map +1 -0
  84. package/dist/code/checks/django.js +313 -0
  85. package/dist/code/checks/django.js.map +1 -0
  86. package/dist/code/checks/flask.d.ts +6 -0
  87. package/dist/code/checks/flask.d.ts.map +1 -0
  88. package/dist/code/checks/flask.js +100 -0
  89. package/dist/code/checks/flask.js.map +1 -0
  90. package/dist/code/checks/index.d.ts +9 -0
  91. package/dist/code/checks/index.d.ts.map +1 -0
  92. package/dist/code/checks/index.js +126 -0
  93. package/dist/code/checks/index.js.map +1 -0
  94. package/dist/code/checks/injection.d.ts +27 -0
  95. package/dist/code/checks/injection.d.ts.map +1 -0
  96. package/dist/code/checks/injection.js +189 -0
  97. package/dist/code/checks/injection.js.map +1 -0
  98. package/dist/code/checks/javascript-config.d.ts +14 -0
  99. package/dist/code/checks/javascript-config.d.ts.map +1 -0
  100. package/dist/code/checks/javascript-config.js +251 -0
  101. package/dist/code/checks/javascript-config.js.map +1 -0
  102. package/dist/code/checks/javascript.d.ts +34 -0
  103. package/dist/code/checks/javascript.d.ts.map +1 -0
  104. package/dist/code/checks/javascript.js +333 -0
  105. package/dist/code/checks/javascript.js.map +1 -0
  106. package/dist/code/checks/php.d.ts +27 -0
  107. package/dist/code/checks/php.d.ts.map +1 -0
  108. package/dist/code/checks/php.js +433 -0
  109. package/dist/code/checks/php.js.map +1 -0
  110. package/dist/code/checks/secrets.d.ts +10 -0
  111. package/dist/code/checks/secrets.d.ts.map +1 -0
  112. package/dist/code/checks/secrets.js +140 -0
  113. package/dist/code/checks/secrets.js.map +1 -0
  114. package/dist/code/checks/shared.d.ts +25 -0
  115. package/dist/code/checks/shared.d.ts.map +1 -0
  116. package/dist/code/checks/shared.js +57 -0
  117. package/dist/code/checks/shared.js.map +1 -0
  118. package/dist/code/checks/treesitter.d.ts +15 -0
  119. package/dist/code/checks/treesitter.d.ts.map +1 -0
  120. package/dist/code/checks/treesitter.js +322 -0
  121. package/dist/code/checks/treesitter.js.map +1 -0
  122. package/dist/code/checks/xml.d.ts +9 -0
  123. package/dist/code/checks/xml.d.ts.map +1 -0
  124. package/dist/code/checks/xml.js +78 -0
  125. package/dist/code/checks/xml.js.map +1 -0
  126. package/dist/code/context.d.ts +6 -0
  127. package/dist/code/context.d.ts.map +1 -0
  128. package/dist/code/context.js +92 -0
  129. package/dist/code/context.js.map +1 -0
  130. package/dist/code/detect.d.ts +3 -0
  131. package/dist/code/detect.d.ts.map +1 -0
  132. package/dist/code/detect.js +118 -0
  133. package/dist/code/detect.js.map +1 -0
  134. package/dist/code/django/settings.d.ts +46 -0
  135. package/dist/code/django/settings.d.ts.map +1 -0
  136. package/dist/code/django/settings.js +154 -0
  137. package/dist/code/django/settings.js.map +1 -0
  138. package/dist/code/findings.d.ts +18 -0
  139. package/dist/code/findings.d.ts.map +1 -0
  140. package/dist/code/findings.js +63 -0
  141. package/dist/code/findings.js.map +1 -0
  142. package/dist/code/javascript/ast.d.ts +46 -0
  143. package/dist/code/javascript/ast.d.ts.map +1 -0
  144. package/dist/code/javascript/ast.js +166 -0
  145. package/dist/code/javascript/ast.js.map +1 -0
  146. package/dist/code/javascript/index.d.ts +3 -0
  147. package/dist/code/javascript/index.d.ts.map +1 -0
  148. package/dist/code/javascript/index.js +3 -0
  149. package/dist/code/javascript/index.js.map +1 -0
  150. package/dist/code/javascript/module.d.ts +59 -0
  151. package/dist/code/javascript/module.d.ts.map +1 -0
  152. package/dist/code/javascript/module.js +250 -0
  153. package/dist/code/javascript/module.js.map +1 -0
  154. package/dist/code/php/index.d.ts +92 -0
  155. package/dist/code/php/index.d.ts.map +1 -0
  156. package/dist/code/php/index.js +316 -0
  157. package/dist/code/php/index.js.map +1 -0
  158. package/dist/code/project.d.ts +13 -0
  159. package/dist/code/project.d.ts.map +1 -0
  160. package/dist/code/project.js +69 -0
  161. package/dist/code/project.js.map +1 -0
  162. package/dist/code/python/ast.d.ts +47 -0
  163. package/dist/code/python/ast.d.ts.map +1 -0
  164. package/dist/code/python/ast.js +193 -0
  165. package/dist/code/python/ast.js.map +1 -0
  166. package/dist/code/python/index.d.ts +3 -0
  167. package/dist/code/python/index.d.ts.map +1 -0
  168. package/dist/code/python/index.js +3 -0
  169. package/dist/code/python/index.js.map +1 -0
  170. package/dist/code/python/module.d.ts +55 -0
  171. package/dist/code/python/module.d.ts.map +1 -0
  172. package/dist/code/python/module.js +215 -0
  173. package/dist/code/python/module.js.map +1 -0
  174. package/dist/code/scan.d.ts +24 -0
  175. package/dist/code/scan.d.ts.map +1 -0
  176. package/dist/code/scan.js +159 -0
  177. package/dist/code/scan.js.map +1 -0
  178. package/dist/code/treesitter/index.d.ts +83 -0
  179. package/dist/code/treesitter/index.d.ts.map +1 -0
  180. package/dist/code/treesitter/index.js +243 -0
  181. package/dist/code/treesitter/index.js.map +1 -0
  182. package/dist/code/types.d.ts +48 -0
  183. package/dist/code/types.d.ts.map +1 -0
  184. package/dist/code/types.js +2 -0
  185. package/dist/code/types.js.map +1 -0
  186. package/dist/content/en.d.ts +3 -0
  187. package/dist/content/en.d.ts.map +1 -0
  188. package/dist/content/en.js +722 -0
  189. package/dist/content/en.js.map +1 -0
  190. package/dist/content/index.d.ts +15 -0
  191. package/dist/content/index.d.ts.map +1 -0
  192. package/dist/content/index.js +21 -0
  193. package/dist/content/index.js.map +1 -0
  194. package/dist/content/types.d.ts +87 -0
  195. package/dist/content/types.d.ts.map +1 -0
  196. package/dist/content/types.js +2 -0
  197. package/dist/content/types.js.map +1 -0
  198. package/dist/engine.d.ts +52 -0
  199. package/dist/engine.d.ts.map +1 -0
  200. package/dist/engine.js +120 -0
  201. package/dist/engine.js.map +1 -0
  202. package/dist/index.d.ts +12 -0
  203. package/dist/index.d.ts.map +1 -0
  204. package/dist/index.js +11 -0
  205. package/dist/index.js.map +1 -0
  206. package/dist/meta.d.ts +4 -0
  207. package/dist/meta.d.ts.map +1 -0
  208. package/dist/meta.js +4 -0
  209. package/dist/meta.js.map +1 -0
  210. package/dist/net/context.d.ts +9 -0
  211. package/dist/net/context.d.ts.map +1 -0
  212. package/dist/net/context.js +62 -0
  213. package/dist/net/context.js.map +1 -0
  214. package/dist/net/guard.d.ts +16 -0
  215. package/dist/net/guard.d.ts.map +1 -0
  216. package/dist/net/guard.js +70 -0
  217. package/dist/net/guard.js.map +1 -0
  218. package/dist/net/http.d.ts +22 -0
  219. package/dist/net/http.d.ts.map +1 -0
  220. package/dist/net/http.js +114 -0
  221. package/dist/net/http.js.map +1 -0
  222. package/dist/net/tls.d.ts +15 -0
  223. package/dist/net/tls.d.ts.map +1 -0
  224. package/dist/net/tls.js +103 -0
  225. package/dist/net/tls.js.map +1 -0
  226. package/dist/report/html.d.ts +14 -0
  227. package/dist/report/html.d.ts.map +1 -0
  228. package/dist/report/html.js +210 -0
  229. package/dist/report/html.js.map +1 -0
  230. package/dist/report/index.d.ts +10 -0
  231. package/dist/report/index.d.ts.map +1 -0
  232. package/dist/report/index.js +10 -0
  233. package/dist/report/index.js.map +1 -0
  234. package/dist/report/manual.d.ts +62 -0
  235. package/dist/report/manual.d.ts.map +1 -0
  236. package/dist/report/manual.js +190 -0
  237. package/dist/report/manual.js.map +1 -0
  238. package/dist/report/merge.d.ts +8 -0
  239. package/dist/report/merge.d.ts.map +1 -0
  240. package/dist/report/merge.js +135 -0
  241. package/dist/report/merge.js.map +1 -0
  242. package/dist/report/summary.d.ts +10 -0
  243. package/dist/report/summary.d.ts.map +1 -0
  244. package/dist/report/summary.js +27 -0
  245. package/dist/report/summary.js.map +1 -0
  246. package/dist/report/validate.d.ts +3 -0
  247. package/dist/report/validate.d.ts.map +1 -0
  248. package/dist/report/validate.js +78 -0
  249. package/dist/report/validate.js.map +1 -0
  250. package/dist/types.d.ts +244 -0
  251. package/dist/types.d.ts.map +1 -0
  252. package/dist/types.js +2 -0
  253. package/dist/types.js.map +1 -0
  254. package/dist/validate.d.ts +4 -0
  255. package/dist/validate.d.ts.map +1 -0
  256. package/dist/validate.js +24 -0
  257. package/dist/validate.js.map +1 -0
  258. package/package.json +40 -0
@@ -0,0 +1,244 @@
1
+ /**
2
+ * Result of one Annex B test.
3
+ * "manual" = still needs a human (no automated verdict and no recorded manual verdict).
4
+ * "not-applicable" = a reviewer recorded that the test does not apply to this site.
5
+ */
6
+ export type Status = "pass" | "fail" | "manual" | "error" | "not-applicable";
7
+ /** A reviewer's verdict on a manually tested item. "untested" keeps the row pending. */
8
+ export type ManualVerdict = "pass" | "fail" | "not-applicable" | "untested";
9
+ /** Reference to a screenshot or file attached as evidence. The bytes live elsewhere (IndexedDB or Report.attachments). */
10
+ export interface AttachmentRef {
11
+ id: string;
12
+ name: string;
13
+ type: string;
14
+ size: number;
15
+ }
16
+ /** An earlier state of a manual review, kept for accountability. */
17
+ export interface ReviewSnapshot {
18
+ verdict: ManualVerdict;
19
+ note?: string;
20
+ evidenceText?: string;
21
+ reviewer?: string;
22
+ /** Screenshots attached in this state. */
23
+ attachments?: AttachmentRef[];
24
+ /** When this state was recorded. */
25
+ at: string;
26
+ carriedFrom?: string;
27
+ }
28
+ /** A human verdict recorded for a row that automation could not decide (Tier 3 guided review). */
29
+ export interface ManualReview {
30
+ verdict: ManualVerdict;
31
+ note?: string;
32
+ /** Pasted evidence: request/response excerpts, observations. */
33
+ evidenceText?: string;
34
+ attachments?: AttachmentRef[];
35
+ /** ISO timestamp of the last change to this review. */
36
+ reviewedAt?: string;
37
+ reviewer?: string;
38
+ /** Set when the verdict was copied from an earlier report (its finish time); cleared once re-recorded. */
39
+ carriedFrom?: string;
40
+ /** Earlier states, oldest first. Maintained by recordVerdict(). */
41
+ history?: ReviewSnapshot[];
42
+ }
43
+ /** An attachment carried inside an exported report (base64), so exports are complete backups. */
44
+ export interface EmbeddedAttachment {
45
+ name: string;
46
+ type: string;
47
+ size: number;
48
+ base64: string;
49
+ }
50
+ /** Plain-language explanation of a term used in guidance. */
51
+ export interface TermExplanation {
52
+ term: string;
53
+ meaning: string;
54
+ }
55
+ /**
56
+ * 1 = passive, URL-only (implemented in v1)
57
+ * 2 = requires source-code / configuration scanning (future)
58
+ * 3 = requires a human (future / always manual)
59
+ */
60
+ export type Tier = 1 | 2 | 3;
61
+ /** How a report row was decided. "manual" = no automated check ran for it. */
62
+ export type EvaluatedBy = "url" | "code" | "url+code" | "manual";
63
+ export type CheckKind = "url" | "code";
64
+ /** How sure a code finding is. Low-confidence findings never produce "fail" on their own. */
65
+ export type Confidence = "high" | "medium" | "low";
66
+ /** One static-analysis hit, located in the scanned project. */
67
+ export interface CodeFinding {
68
+ /** Path relative to the project root, using "/" separators. */
69
+ file: string;
70
+ line: number;
71
+ /** The matched source line (trimmed, secrets redacted). */
72
+ snippet: string;
73
+ /** Why this matters, in one line. */
74
+ why: string;
75
+ confidence: Confidence;
76
+ /** "ast" = syntax-tree match; "regex" = text match (higher false-positive rate). */
77
+ method: "ast" | "regex";
78
+ /** Rule identifier, e.g. "py-sql-string-building". */
79
+ rule: string;
80
+ }
81
+ /** A finding as it appears in a report row, stamped with the Annex B item it was reported under. */
82
+ export interface ReportedFinding extends CodeFinding {
83
+ item: string;
84
+ }
85
+ /** One row of Annex B, transcribed verbatim from the standard. */
86
+ export interface AnnexItem {
87
+ /** Original Annex B item number. */
88
+ id: string;
89
+ /** Annex B section heading the item sits under. */
90
+ section: string;
91
+ /** Annex B test title. */
92
+ title: string;
93
+ tier: Tier;
94
+ /** Keys of the automated checks that decide this item, per kind (url: checks/index.ts, code: code/checks/index.ts). */
95
+ checks?: {
96
+ url?: string;
97
+ code?: string | string[];
98
+ };
99
+ /** How to test the item by hand, in one line. Shown whenever the item is reported as "manual". */
100
+ manualNote: string;
101
+ /** Guided-review content (from content/<locale>.ts): what to check and why. */
102
+ guidance?: string;
103
+ /** 2-5 concrete test steps. */
104
+ howToTest?: string[];
105
+ /** What the reviewer should record as evidence. */
106
+ evidencePrompt?: string;
107
+ /** Plain explanations of technical terms used above. */
108
+ terms?: TermExplanation[];
109
+ /** Related requirements in INSA documents, cited by clause. */
110
+ references?: string[];
111
+ }
112
+ /** What a check returns. The engine adds id/section/title from the registry. */
113
+ export interface CheckOutcome {
114
+ status: Status;
115
+ detail: string;
116
+ /** Concrete observations backing the verdict (header values, URLs, cookie names...). */
117
+ evidence?: string[];
118
+ /** Code checks only: the located findings behind the verdict. */
119
+ findings?: CodeFinding[];
120
+ }
121
+ export interface CheckResult extends Omit<CheckOutcome, "findings"> {
122
+ id: string;
123
+ section: string;
124
+ title: string;
125
+ tier: Tier;
126
+ evaluatedBy: EvaluatedBy;
127
+ findings?: ReportedFinding[];
128
+ /** Present on rows that need (or received) a human verdict. */
129
+ manual?: ManualReview;
130
+ }
131
+ /** A passive check against a live URL (Tier 1). */
132
+ export interface UrlCheck {
133
+ kind: "url";
134
+ /** Stable identifier, referenced from AnnexItem.checks.url. */
135
+ key: string;
136
+ run(ctx: ScanContext): Promise<CheckOutcome>;
137
+ }
138
+ /** Kept for v1 compatibility. */
139
+ export type Check = UrlCheck;
140
+ export interface HttpResponse {
141
+ /** Final URL after any redirects that were followed. */
142
+ url: string;
143
+ status: number;
144
+ /** Lower-cased header names. Repeated headers are joined with ", " (except set-cookie). */
145
+ headers: Record<string, string>;
146
+ /** Raw Set-Cookie header values from the final response. */
147
+ setCookies: string[];
148
+ /** Body decoded as UTF-8, truncated to the client's body limit. */
149
+ body: string;
150
+ /** Every URL visited before the final one, in order. Empty if no redirect occurred. */
151
+ redirects: string[];
152
+ }
153
+ export interface RequestOptions {
154
+ method?: string;
155
+ /** Defaults to true. */
156
+ followRedirects?: boolean;
157
+ headers?: Record<string, string>;
158
+ }
159
+ export interface CertificateInfo {
160
+ subject: string;
161
+ issuer: string;
162
+ validFrom: string;
163
+ validTo: string;
164
+ daysRemaining: number;
165
+ subjectAltNames: string[];
166
+ /** Public key algorithm family, when it can be determined. */
167
+ keyType?: "RSA" | "EC";
168
+ /** Public key size in bits, when reported. */
169
+ bits?: number;
170
+ }
171
+ export interface TlsInfo {
172
+ /** Negotiated protocol, e.g. "TLSv1.3". */
173
+ protocol: string | null;
174
+ cipher: string | null;
175
+ /** True when the chain is trusted and the hostname matches. */
176
+ authorized: boolean;
177
+ /** OpenSSL / Node error code when not authorized, e.g. CERT_HAS_EXPIRED. */
178
+ authorizationError?: string;
179
+ cert: CertificateInfo | null;
180
+ }
181
+ export type LegacyTlsVersion = "TLSv1" | "TLSv1.1";
182
+ /**
183
+ * Everything a check may do to the target. Injected so that checks are pure
184
+ * with respect to I/O and can be unit-tested with fakes.
185
+ */
186
+ export interface ScanContext {
187
+ /** Normalised target URL (origin + path the user supplied). */
188
+ target: URL;
189
+ /** Request a path (resolved against target) or absolute URL. Responses are cached per method+URL. */
190
+ request(pathOrUrl: string, opts?: RequestOptions): Promise<HttpResponse>;
191
+ /** TLS handshake details for the target host. Cached. */
192
+ tlsInfo(): Promise<TlsInfo>;
193
+ /** Whether the server completes a handshake when only the given legacy version is offered. */
194
+ probeTls(version: LegacyTlsVersion): Promise<boolean>;
195
+ }
196
+ export interface ReportSummary {
197
+ total: number;
198
+ pass: number;
199
+ fail: number;
200
+ manual: number;
201
+ error: number;
202
+ /** Absent on reports created before Tier 3. */
203
+ "not-applicable"?: number;
204
+ }
205
+ export interface Report {
206
+ tool: {
207
+ name: string;
208
+ version: string;
209
+ };
210
+ /** Which edition of Annex B the registry was transcribed from. */
211
+ standard: string;
212
+ /** Display name of what was scanned: a URL, "code: <project>", or both for a combined report. */
213
+ target: string;
214
+ /** What contributed to this report. Absent on v1 reports (URL only). */
215
+ sources?: ReportSources;
216
+ /** Warnings about coverage (unparseable files, unsupported framework...). */
217
+ notes?: string[];
218
+ /** Evidence files embedded for export, keyed by AttachmentRef.id. */
219
+ attachments?: Record<string, EmbeddedAttachment>;
220
+ startedAt: string;
221
+ finishedAt: string;
222
+ summary: ReportSummary;
223
+ /** In Annex B order. */
224
+ results: CheckResult[];
225
+ }
226
+ export interface CodeSource {
227
+ /** Project directory name (never the absolute path). */
228
+ name: string;
229
+ language: string | null;
230
+ /** Every language with source files in the project (the first is the primary one). */
231
+ languages?: string[];
232
+ frameworks: string[];
233
+ filesAnalyzed: number;
234
+ filesSkipped: number;
235
+ parseErrors: {
236
+ file: string;
237
+ error: string;
238
+ }[];
239
+ }
240
+ export interface ReportSources {
241
+ url?: string;
242
+ code?: CodeSource;
243
+ }
244
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import type { AnnexItem } from "./types.js";
2
+ /** Registry sanity: unique ids, known check keys of the right kind. Used by tests and at CLI start-up. */
3
+ export declare function validateRegistry(registry?: readonly AnnexItem[], urlChecks?: ReadonlyMap<string, unknown>, codeChecks?: ReadonlyMap<string, unknown>): string[];
4
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,0GAA0G;AAC1G,wBAAgB,gBAAgB,CAC9B,QAAQ,GAAE,SAAS,SAAS,EAAY,EACxC,SAAS,GAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAU,EAChD,UAAU,GAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAe,GACrD,MAAM,EAAE,CAcV"}
@@ -0,0 +1,24 @@
1
+ import { ANNEX_B } from "./annex-b.js";
2
+ import { CHECKS } from "./checks/index.js";
3
+ import { CODE_CHECKS } from "./code/checks/index.js";
4
+ /** Registry sanity: unique ids, known check keys of the right kind. Used by tests and at CLI start-up. */
5
+ export function validateRegistry(registry = ANNEX_B, urlChecks = CHECKS, codeChecks = CODE_CHECKS) {
6
+ const problems = [];
7
+ const seen = new Set();
8
+ for (const item of registry) {
9
+ if (seen.has(item.id))
10
+ problems.push(`Duplicate item id ${item.id}`);
11
+ seen.add(item.id);
12
+ const { url, code } = item.checks ?? {};
13
+ if (url && !urlChecks.has(url))
14
+ problems.push(`Item ${item.id} references unknown url check "${url}"`);
15
+ for (const key of [code ?? []].flat()) {
16
+ if (!codeChecks.has(key))
17
+ problems.push(`Item ${item.id} references unknown code check "${key}"`);
18
+ }
19
+ if (!item.manualNote.trim())
20
+ problems.push(`Item ${item.id} has no manualNote`);
21
+ }
22
+ return problems;
23
+ }
24
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAGrD,0GAA0G;AAC1G,MAAM,UAAU,gBAAgB,CAC9B,QAAQ,GAAyB,OAAO,EACxC,SAAS,GAAiC,MAAM,EAChD,UAAU,GAAiC,WAAW;IAEtD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACrE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;QACxC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,EAAE,kCAAkC,GAAG,GAAG,CAAC,CAAC;QACvG,KAAK,MAAM,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YACtC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,EAAE,mCAAmC,GAAG,GAAG,CAAC,CAAC;QACpG,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;YAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,EAAE,oBAAoB,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "insa-check-core",
3
+ "version": "0.1.0",
4
+ "description": "Check engine for INSA Secure Website Management Standard, Annex B",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "default": "./dist/index.js"
12
+ },
13
+ "./report": {
14
+ "types": "./dist/report/index.d.ts",
15
+ "default": "./dist/report/index.js"
16
+ }
17
+ },
18
+ "files": [
19
+ "LICENSE",
20
+ "dist"
21
+ ],
22
+ "license": "SEE LICENSE IN LICENSE",
23
+ "dependencies": {
24
+ "@babel/parser": "^7.29.9",
25
+ "php-parser": "^3.7.0",
26
+ "tree-sitter-wasms": "^0.1.13",
27
+ "web-tree-sitter": "^0.22.6"
28
+ },
29
+ "repository": {
30
+ "type": "git",
31
+ "url": "git+https://github.com/zikra-abdusemed-cmd/insa-check.git",
32
+ "directory": "packages/core"
33
+ },
34
+ "engines": {
35
+ "node": ">=20"
36
+ },
37
+ "publishConfig": {
38
+ "access": "public"
39
+ }
40
+ }