euparliamentmonitor 0.8.4

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 (276) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +1005 -0
  3. package/SECURITY.md +151 -0
  4. package/package.json +131 -0
  5. package/scripts/constants/committee-indicator-map.d.ts +199 -0
  6. package/scripts/constants/committee-indicator-map.d.ts.map +1 -0
  7. package/scripts/constants/committee-indicator-map.js +1224 -0
  8. package/scripts/constants/committee-indicator-map.js.map +1 -0
  9. package/scripts/constants/config.d.ts +38 -0
  10. package/scripts/constants/config.d.ts.map +1 -0
  11. package/scripts/constants/config.js +66 -0
  12. package/scripts/constants/config.js.map +1 -0
  13. package/scripts/constants/language-articles.d.ts +84 -0
  14. package/scripts/constants/language-articles.d.ts.map +1 -0
  15. package/scripts/constants/language-articles.js +6771 -0
  16. package/scripts/constants/language-articles.js.map +1 -0
  17. package/scripts/constants/language-core.d.ts +38 -0
  18. package/scripts/constants/language-core.d.ts.map +1 -0
  19. package/scripts/constants/language-core.js +90 -0
  20. package/scripts/constants/language-core.js.map +1 -0
  21. package/scripts/constants/language-ui.d.ts +82 -0
  22. package/scripts/constants/language-ui.d.ts.map +1 -0
  23. package/scripts/constants/language-ui.js +889 -0
  24. package/scripts/constants/language-ui.js.map +1 -0
  25. package/scripts/constants/languages.d.ts +14 -0
  26. package/scripts/constants/languages.d.ts.map +1 -0
  27. package/scripts/constants/languages.js +15 -0
  28. package/scripts/constants/languages.js.map +1 -0
  29. package/scripts/generators/analysis-builders.d.ts +266 -0
  30. package/scripts/generators/analysis-builders.d.ts.map +1 -0
  31. package/scripts/generators/analysis-builders.js +2903 -0
  32. package/scripts/generators/analysis-builders.js.map +1 -0
  33. package/scripts/generators/breaking-content.d.ts +45 -0
  34. package/scripts/generators/breaking-content.d.ts.map +1 -0
  35. package/scripts/generators/breaking-content.js +530 -0
  36. package/scripts/generators/breaking-content.js.map +1 -0
  37. package/scripts/generators/committee-helpers.d.ts +54 -0
  38. package/scripts/generators/committee-helpers.d.ts.map +1 -0
  39. package/scripts/generators/committee-helpers.js +154 -0
  40. package/scripts/generators/committee-helpers.js.map +1 -0
  41. package/scripts/generators/dashboard-content.d.ts +95 -0
  42. package/scripts/generators/dashboard-content.d.ts.map +1 -0
  43. package/scripts/generators/dashboard-content.js +630 -0
  44. package/scripts/generators/dashboard-content.js.map +1 -0
  45. package/scripts/generators/deep-analysis-content.d.ts +23 -0
  46. package/scripts/generators/deep-analysis-content.d.ts.map +1 -0
  47. package/scripts/generators/deep-analysis-content.js +831 -0
  48. package/scripts/generators/deep-analysis-content.js.map +1 -0
  49. package/scripts/generators/mindmap-content.d.ts +55 -0
  50. package/scripts/generators/mindmap-content.d.ts.map +1 -0
  51. package/scripts/generators/mindmap-content.js +512 -0
  52. package/scripts/generators/mindmap-content.js.map +1 -0
  53. package/scripts/generators/motions-content.d.ts +50 -0
  54. package/scripts/generators/motions-content.d.ts.map +1 -0
  55. package/scripts/generators/motions-content.js +391 -0
  56. package/scripts/generators/motions-content.js.map +1 -0
  57. package/scripts/generators/news-enhanced.d.ts +14 -0
  58. package/scripts/generators/news-enhanced.d.ts.map +1 -0
  59. package/scripts/generators/news-enhanced.js +169 -0
  60. package/scripts/generators/news-enhanced.js.map +1 -0
  61. package/scripts/generators/news-indexes.d.ts +31 -0
  62. package/scripts/generators/news-indexes.d.ts.map +1 -0
  63. package/scripts/generators/news-indexes.js +410 -0
  64. package/scripts/generators/news-indexes.js.map +1 -0
  65. package/scripts/generators/pipeline/fetch-stage.d.ts +352 -0
  66. package/scripts/generators/pipeline/fetch-stage.d.ts.map +1 -0
  67. package/scripts/generators/pipeline/fetch-stage.js +1522 -0
  68. package/scripts/generators/pipeline/fetch-stage.js.map +1 -0
  69. package/scripts/generators/pipeline/generate-stage.d.ts +43 -0
  70. package/scripts/generators/pipeline/generate-stage.d.ts.map +1 -0
  71. package/scripts/generators/pipeline/generate-stage.js +204 -0
  72. package/scripts/generators/pipeline/generate-stage.js.map +1 -0
  73. package/scripts/generators/pipeline/output-stage.d.ts +48 -0
  74. package/scripts/generators/pipeline/output-stage.d.ts.map +1 -0
  75. package/scripts/generators/pipeline/output-stage.js +145 -0
  76. package/scripts/generators/pipeline/output-stage.js.map +1 -0
  77. package/scripts/generators/pipeline/transform-stage.d.ts +57 -0
  78. package/scripts/generators/pipeline/transform-stage.d.ts.map +1 -0
  79. package/scripts/generators/pipeline/transform-stage.js +111 -0
  80. package/scripts/generators/pipeline/transform-stage.js.map +1 -0
  81. package/scripts/generators/propositions-content.d.ts +29 -0
  82. package/scripts/generators/propositions-content.d.ts.map +1 -0
  83. package/scripts/generators/propositions-content.js +90 -0
  84. package/scripts/generators/propositions-content.js.map +1 -0
  85. package/scripts/generators/sankey-content.d.ts +45 -0
  86. package/scripts/generators/sankey-content.d.ts.map +1 -0
  87. package/scripts/generators/sankey-content.js +227 -0
  88. package/scripts/generators/sankey-content.js.map +1 -0
  89. package/scripts/generators/sitemap.d.ts +66 -0
  90. package/scripts/generators/sitemap.d.ts.map +1 -0
  91. package/scripts/generators/sitemap.js +562 -0
  92. package/scripts/generators/sitemap.js.map +1 -0
  93. package/scripts/generators/strategies/article-strategy.d.ts +146 -0
  94. package/scripts/generators/strategies/article-strategy.d.ts.map +1 -0
  95. package/scripts/generators/strategies/article-strategy.js +4 -0
  96. package/scripts/generators/strategies/article-strategy.js.map +1 -0
  97. package/scripts/generators/strategies/breaking-news-strategy.d.ts +64 -0
  98. package/scripts/generators/strategies/breaking-news-strategy.d.ts.map +1 -0
  99. package/scripts/generators/strategies/breaking-news-strategy.js +246 -0
  100. package/scripts/generators/strategies/breaking-news-strategy.js.map +1 -0
  101. package/scripts/generators/strategies/committee-reports-strategy.d.ts +93 -0
  102. package/scripts/generators/strategies/committee-reports-strategy.d.ts.map +1 -0
  103. package/scripts/generators/strategies/committee-reports-strategy.js +447 -0
  104. package/scripts/generators/strategies/committee-reports-strategy.js.map +1 -0
  105. package/scripts/generators/strategies/month-ahead-strategy.d.ts +60 -0
  106. package/scripts/generators/strategies/month-ahead-strategy.d.ts.map +1 -0
  107. package/scripts/generators/strategies/month-ahead-strategy.js +175 -0
  108. package/scripts/generators/strategies/month-ahead-strategy.js.map +1 -0
  109. package/scripts/generators/strategies/monthly-review-strategy.d.ts +66 -0
  110. package/scripts/generators/strategies/monthly-review-strategy.d.ts.map +1 -0
  111. package/scripts/generators/strategies/monthly-review-strategy.js +204 -0
  112. package/scripts/generators/strategies/monthly-review-strategy.js.map +1 -0
  113. package/scripts/generators/strategies/motions-strategy.d.ts +61 -0
  114. package/scripts/generators/strategies/motions-strategy.d.ts.map +1 -0
  115. package/scripts/generators/strategies/motions-strategy.js +215 -0
  116. package/scripts/generators/strategies/motions-strategy.js.map +1 -0
  117. package/scripts/generators/strategies/propositions-strategy.d.ts +60 -0
  118. package/scripts/generators/strategies/propositions-strategy.d.ts.map +1 -0
  119. package/scripts/generators/strategies/propositions-strategy.js +257 -0
  120. package/scripts/generators/strategies/propositions-strategy.js.map +1 -0
  121. package/scripts/generators/strategies/week-ahead-strategy.d.ts +57 -0
  122. package/scripts/generators/strategies/week-ahead-strategy.d.ts.map +1 -0
  123. package/scripts/generators/strategies/week-ahead-strategy.js +178 -0
  124. package/scripts/generators/strategies/week-ahead-strategy.js.map +1 -0
  125. package/scripts/generators/strategies/weekly-review-strategy.d.ts +63 -0
  126. package/scripts/generators/strategies/weekly-review-strategy.d.ts.map +1 -0
  127. package/scripts/generators/strategies/weekly-review-strategy.js +211 -0
  128. package/scripts/generators/strategies/weekly-review-strategy.js.map +1 -0
  129. package/scripts/generators/swot-content.d.ts +42 -0
  130. package/scripts/generators/swot-content.d.ts.map +1 -0
  131. package/scripts/generators/swot-content.js +366 -0
  132. package/scripts/generators/swot-content.js.map +1 -0
  133. package/scripts/generators/week-ahead-content.d.ts +103 -0
  134. package/scripts/generators/week-ahead-content.d.ts.map +1 -0
  135. package/scripts/generators/week-ahead-content.js +610 -0
  136. package/scripts/generators/week-ahead-content.js.map +1 -0
  137. package/scripts/index.d.ts +40 -0
  138. package/scripts/index.d.ts.map +1 -0
  139. package/scripts/index.js +53 -0
  140. package/scripts/index.js.map +1 -0
  141. package/scripts/mcp/ep-mcp-client.d.ts +471 -0
  142. package/scripts/mcp/ep-mcp-client.d.ts.map +1 -0
  143. package/scripts/mcp/ep-mcp-client.js +734 -0
  144. package/scripts/mcp/ep-mcp-client.js.map +1 -0
  145. package/scripts/mcp/mcp-connection.d.ts +264 -0
  146. package/scripts/mcp/mcp-connection.d.ts.map +1 -0
  147. package/scripts/mcp/mcp-connection.js +790 -0
  148. package/scripts/mcp/mcp-connection.js.map +1 -0
  149. package/scripts/mcp/mcp-health.d.ts +75 -0
  150. package/scripts/mcp/mcp-health.d.ts.map +1 -0
  151. package/scripts/mcp/mcp-health.js +78 -0
  152. package/scripts/mcp/mcp-health.js.map +1 -0
  153. package/scripts/mcp/mcp-retry.d.ts +94 -0
  154. package/scripts/mcp/mcp-retry.d.ts.map +1 -0
  155. package/scripts/mcp/mcp-retry.js +127 -0
  156. package/scripts/mcp/mcp-retry.js.map +1 -0
  157. package/scripts/mcp/wb-mcp-client.d.ts +38 -0
  158. package/scripts/mcp/wb-mcp-client.d.ts.map +1 -0
  159. package/scripts/mcp/wb-mcp-client.js +112 -0
  160. package/scripts/mcp/wb-mcp-client.js.map +1 -0
  161. package/scripts/templates/article-template.d.ts +9 -0
  162. package/scripts/templates/article-template.d.ts.map +1 -0
  163. package/scripts/templates/article-template.js +378 -0
  164. package/scripts/templates/article-template.js.map +1 -0
  165. package/scripts/templates/section-builders.d.ts +28 -0
  166. package/scripts/templates/section-builders.d.ts.map +1 -0
  167. package/scripts/templates/section-builders.js +142 -0
  168. package/scripts/templates/section-builders.js.map +1 -0
  169. package/scripts/types/analysis.d.ts +115 -0
  170. package/scripts/types/analysis.d.ts.map +1 -0
  171. package/scripts/types/analysis.js +4 -0
  172. package/scripts/types/analysis.js.map +1 -0
  173. package/scripts/types/common.d.ts +584 -0
  174. package/scripts/types/common.d.ts.map +1 -0
  175. package/scripts/types/common.js +96 -0
  176. package/scripts/types/common.js.map +1 -0
  177. package/scripts/types/generation.d.ts +104 -0
  178. package/scripts/types/generation.d.ts.map +1 -0
  179. package/scripts/types/generation.js +4 -0
  180. package/scripts/types/generation.js.map +1 -0
  181. package/scripts/types/index.d.ts +24 -0
  182. package/scripts/types/index.d.ts.map +1 -0
  183. package/scripts/types/index.js +16 -0
  184. package/scripts/types/index.js.map +1 -0
  185. package/scripts/types/intelligence.d.ts +129 -0
  186. package/scripts/types/intelligence.d.ts.map +1 -0
  187. package/scripts/types/intelligence.js +4 -0
  188. package/scripts/types/intelligence.js.map +1 -0
  189. package/scripts/types/mcp.d.ts +418 -0
  190. package/scripts/types/mcp.d.ts.map +1 -0
  191. package/scripts/types/mcp.js +4 -0
  192. package/scripts/types/mcp.js.map +1 -0
  193. package/scripts/types/parliament.d.ts +388 -0
  194. package/scripts/types/parliament.d.ts.map +1 -0
  195. package/scripts/types/parliament.js +4 -0
  196. package/scripts/types/parliament.js.map +1 -0
  197. package/scripts/types/quality.d.ts +114 -0
  198. package/scripts/types/quality.d.ts.map +1 -0
  199. package/scripts/types/quality.js +4 -0
  200. package/scripts/types/quality.js.map +1 -0
  201. package/scripts/types/stakeholder.d.ts +88 -0
  202. package/scripts/types/stakeholder.d.ts.map +1 -0
  203. package/scripts/types/stakeholder.js +16 -0
  204. package/scripts/types/stakeholder.js.map +1 -0
  205. package/scripts/types/visualization.d.ts +708 -0
  206. package/scripts/types/visualization.d.ts.map +1 -0
  207. package/scripts/types/visualization.js +4 -0
  208. package/scripts/types/visualization.js.map +1 -0
  209. package/scripts/types/world-bank.d.ts +85 -0
  210. package/scripts/types/world-bank.d.ts.map +1 -0
  211. package/scripts/types/world-bank.js +4 -0
  212. package/scripts/types/world-bank.js.map +1 -0
  213. package/scripts/utils/article-category.d.ts +18 -0
  214. package/scripts/utils/article-category.d.ts.map +1 -0
  215. package/scripts/utils/article-category.js +49 -0
  216. package/scripts/utils/article-category.js.map +1 -0
  217. package/scripts/utils/article-quality-scorer.d.ts +87 -0
  218. package/scripts/utils/article-quality-scorer.d.ts.map +1 -0
  219. package/scripts/utils/article-quality-scorer.js +1048 -0
  220. package/scripts/utils/article-quality-scorer.js.map +1 -0
  221. package/scripts/utils/content-metadata.d.ts +34 -0
  222. package/scripts/utils/content-metadata.d.ts.map +1 -0
  223. package/scripts/utils/content-metadata.js +249 -0
  224. package/scripts/utils/content-metadata.js.map +1 -0
  225. package/scripts/utils/content-validator.d.ts +94 -0
  226. package/scripts/utils/content-validator.d.ts.map +1 -0
  227. package/scripts/utils/content-validator.js +489 -0
  228. package/scripts/utils/content-validator.js.map +1 -0
  229. package/scripts/utils/copy-test-reports.d.ts +9 -0
  230. package/scripts/utils/copy-test-reports.d.ts.map +1 -0
  231. package/scripts/utils/copy-test-reports.js +508 -0
  232. package/scripts/utils/copy-test-reports.js.map +1 -0
  233. package/scripts/utils/file-utils.d.ts +144 -0
  234. package/scripts/utils/file-utils.d.ts.map +1 -0
  235. package/scripts/utils/file-utils.js +374 -0
  236. package/scripts/utils/file-utils.js.map +1 -0
  237. package/scripts/utils/fix-articles.d.ts +27 -0
  238. package/scripts/utils/fix-articles.d.ts.map +1 -0
  239. package/scripts/utils/fix-articles.js +510 -0
  240. package/scripts/utils/fix-articles.js.map +1 -0
  241. package/scripts/utils/generate-docs-index.d.ts +8 -0
  242. package/scripts/utils/generate-docs-index.d.ts.map +1 -0
  243. package/scripts/utils/generate-docs-index.js +275 -0
  244. package/scripts/utils/generate-docs-index.js.map +1 -0
  245. package/scripts/utils/html-sanitize.d.ts +18 -0
  246. package/scripts/utils/html-sanitize.d.ts.map +1 -0
  247. package/scripts/utils/html-sanitize.js +57 -0
  248. package/scripts/utils/html-sanitize.js.map +1 -0
  249. package/scripts/utils/intelligence-analysis.d.ts +173 -0
  250. package/scripts/utils/intelligence-analysis.d.ts.map +1 -0
  251. package/scripts/utils/intelligence-analysis.js +936 -0
  252. package/scripts/utils/intelligence-analysis.js.map +1 -0
  253. package/scripts/utils/intelligence-index.d.ts +126 -0
  254. package/scripts/utils/intelligence-index.d.ts.map +1 -0
  255. package/scripts/utils/intelligence-index.js +731 -0
  256. package/scripts/utils/intelligence-index.js.map +1 -0
  257. package/scripts/utils/metadata-utils.d.ts +14 -0
  258. package/scripts/utils/metadata-utils.d.ts.map +1 -0
  259. package/scripts/utils/metadata-utils.js +18 -0
  260. package/scripts/utils/metadata-utils.js.map +1 -0
  261. package/scripts/utils/news-metadata.d.ts +47 -0
  262. package/scripts/utils/news-metadata.d.ts.map +1 -0
  263. package/scripts/utils/news-metadata.js +259 -0
  264. package/scripts/utils/news-metadata.js.map +1 -0
  265. package/scripts/utils/validate-articles.d.ts +2 -0
  266. package/scripts/utils/validate-articles.d.ts.map +1 -0
  267. package/scripts/utils/validate-articles.js +284 -0
  268. package/scripts/utils/validate-articles.js.map +1 -0
  269. package/scripts/utils/validate-ep-api.d.ts +51 -0
  270. package/scripts/utils/validate-ep-api.d.ts.map +1 -0
  271. package/scripts/utils/validate-ep-api.js +160 -0
  272. package/scripts/utils/validate-ep-api.js.map +1 -0
  273. package/scripts/utils/world-bank-data.d.ts +84 -0
  274. package/scripts/utils/world-bank-data.d.ts.map +1 -0
  275. package/scripts/utils/world-bank-data.js +311 -0
  276. package/scripts/utils/world-bank-data.js.map +1 -0
package/SECURITY.md ADDED
@@ -0,0 +1,151 @@
1
+ # Security Policy
2
+
3
+ ## Supported Versions
4
+
5
+ This project is under active development, and we provide security updates for the latest version only. Please ensure you're using the latest version of the project to receive security updates.
6
+
7
+ | Version | Supported |
8
+ | ------- | ------------------ |
9
+ | latest | :white_check_mark: |
10
+
11
+ ## Security Architecture
12
+
13
+ For comprehensive information about the security architecture, threat model, and security controls implemented in EU Parliament Monitor, please refer to:
14
+
15
+ - **[Security Architecture](SECURITY_ARCHITECTURE.md)** - Complete security implementation overview with C4 diagrams, threat model (STRIDE analysis), and compliance mapping
16
+ - **[Future Security Architecture](FUTURE_SECURITY_ARCHITECTURE.md)** - Security enhancement roadmap (2026-2027)
17
+ - **[Hack23 ISMS Secure Development Policy](https://github.com/Hack23/ISMS-PUBLIC/blob/main/Secure_Development_Policy.md)** - Organization-wide secure development standards
18
+
19
+ ## Reporting a Vulnerability
20
+
21
+ We take the security of the EU Parliament Monitor project seriously. If you have found a potential security vulnerability, we kindly ask you to report it privately, so that we can assess and address the issue before it becomes publicly known.
22
+
23
+ ### What Constitutes a Vulnerability
24
+
25
+ A vulnerability is a weakness or flaw in the project that can be exploited to compromise the security, integrity, or availability of the system or its data. Examples of vulnerabilities include, but are not limited to:
26
+
27
+ - Cross-site scripting (XSS) attacks
28
+ - HTML injection vulnerabilities
29
+ - Insecure dependencies or supply chain attacks
30
+ - Exposure of sensitive data
31
+ - Insecure defaults or configurations
32
+ - Insufficient input validation
33
+ - Content Security Policy bypasses
34
+
35
+ ### How to Privately Report a Vulnerability using GitHub
36
+
37
+ Please follow these steps to privately report a security vulnerability:
38
+
39
+ 1. On GitHub.com, navigate to the main page of the [euparliamentmonitor repository](https://github.com/Hack23/euparliamentmonitor).
40
+ 2. Under the repository name, click **Security**. If you cannot see the "Security" tab, select the dropdown menu, and then click **Security**.
41
+ 3. In the left sidebar, under "Reporting", click **Advisories**.
42
+ 4. Click **Report a vulnerability** to open the advisory form.
43
+ 5. Fill in the advisory details form. Provide as much information as possible to help us understand and reproduce the issue, including:
44
+ - Description of the vulnerability
45
+ - Steps to reproduce
46
+ - Potential impact
47
+ - Suggested mitigation (if known)
48
+ 6. At the bottom of the form, click **Submit report**.
49
+
50
+ After you submit the report, the maintainers of the euparliamentmonitor repository will be notified. They will review the report, validate the vulnerability, and take necessary actions to address the issue. You will be added as a collaborator and credited for the security advisory.
51
+
52
+ ### Alternative Reporting Methods
53
+
54
+ If you prefer not to use GitHub's security advisory system, you can also report vulnerabilities via:
55
+
56
+ - **Email**: security@hack23.com
57
+ - **Subject**: [SECURITY] EU Parliament Monitor - [Brief Description]
58
+
59
+ ### Disclosure Timeline
60
+
61
+ Upon receipt of a vulnerability report, our team will:
62
+
63
+ 1. **Acknowledge** the report within **48 hours**
64
+ 2. **Validate** the vulnerability within **7 days**
65
+ 3. **Develop and release** a patch or mitigation within **30 days** for critical/high severity issues, depending on complexity
66
+ 4. **Publish** a security advisory with a detailed description of the vulnerability and the fix
67
+
68
+ **Severity-Based SLAs** (per [Hack23 ISMS Vulnerability Management Policy](https://github.com/Hack23/ISMS-PUBLIC/blob/main/Vulnerability_Management.md)):
69
+
70
+ | Severity | Remediation SLA | Description |
71
+ |----------|----------------|-------------|
72
+ | Critical (CVSS 9.0-10.0) | 7 days | Immediate threat, active exploitation possible |
73
+ | High (CVSS 7.0-8.9) | 30 days | Significant security impact |
74
+ | Medium (CVSS 4.0-6.9) | 90 days | Moderate security impact |
75
+ | Low (CVSS 0.1-3.9) | Best effort | Minimal security impact |
76
+
77
+ ### Security Testing
78
+
79
+ We employ multiple layers of security testing:
80
+
81
+ - **SAST**: CodeQL scanning (automated, weekly + PR triggers)
82
+ - **SCA**: Dependabot dependency scanning (daily)
83
+ - **Manual Testing**: Security-focused unit tests (≥80% coverage)
84
+ - **Vulnerability Scanning**: npm audit (automated in CI/CD)
85
+
86
+ See [SECURITY_ARCHITECTURE.md - Security Testing](SECURITY_ARCHITECTURE.md#-security-testing) for details.
87
+
88
+ ### Scope
89
+
90
+ **In Scope**:
91
+ - News generation scripts (scripts/)
92
+ - HTML templates and output
93
+ - MCP client integration
94
+ - GitHub Actions workflows
95
+ - Dependencies and supply chain
96
+
97
+ **Out of Scope**:
98
+ - Third-party services (GitHub, European Parliament APIs)
99
+ - Infrastructure (GitHub Pages hosting)
100
+ - Client-side browser vulnerabilities (not controlled by this project)
101
+
102
+ ### Recognition and Anonymity
103
+
104
+ We appreciate your effort in helping us maintain a secure and reliable project. If your report results in a confirmed security fix, we will recognize your contribution in:
105
+
106
+ - Release notes
107
+ - Security advisory acknowledgment
108
+ - Public GitHub recognition (unless you request to remain anonymous)
109
+
110
+ Contributors who help improve our security posture may also be considered for our Security Hall of Fame.
111
+
112
+ ## Security Compliance
113
+
114
+ EU Parliament Monitor aligns with:
115
+
116
+ - **ISO 27001**: Information security management (see [SECURITY_ARCHITECTURE.md - Compliance Matrix](SECURITY_ARCHITECTURE.md#-compliance-matrix))
117
+ - **GDPR**: Data protection and privacy (European Parliament open data is public)
118
+ - **NIS2**: Network and information security (Article 20, 21 compliance)
119
+ - **EU Cyber Resilience Act**: Software supply chain security (SBOM, vulnerability disclosure)
120
+ - **NIST Cybersecurity Framework 2.0**: Identify, Protect, Detect, Respond, Recover
121
+ - **CIS Controls v8.1**: Critical security controls implementation
122
+ - **OWASP Top 10**: Web application security best practices
123
+
124
+ ## Security Metrics
125
+
126
+ Current security posture (updated monthly):
127
+
128
+ - **Zero** known vulnerabilities (npm audit clean)
129
+ - **82%+** code coverage with security tests
130
+ - **100%** dependency scanning coverage
131
+ - **0** CodeQL critical/high findings
132
+ - **OpenSSF Scorecard**: Target ≥7.0 (in progress)
133
+
134
+ See [SECURITY_ARCHITECTURE.md - Security Metrics](SECURITY_ARCHITECTURE.md#-security-metrics) for detailed metrics.
135
+
136
+ ## Security Resources
137
+
138
+ - **Threat Model**: [SECURITY_ARCHITECTURE.md - Threat Model](SECURITY_ARCHITECTURE.md#-threat-model)
139
+ - **Security Controls**: [SECURITY_ARCHITECTURE.md - Security Controls](SECURITY_ARCHITECTURE.md#-security-controls)
140
+ - **Incident Response**: [Hack23 ISMS Incident Response Plan](https://github.com/Hack23/ISMS-PUBLIC/blob/main/Incident_Response_Plan.md)
141
+ - **Vulnerability Management**: [Hack23 ISMS Vulnerability Management](https://github.com/Hack23/ISMS-PUBLIC/blob/main/Vulnerability_Management.md)
142
+
143
+ ## Contact
144
+
145
+ For non-security issues, please use:
146
+ - **GitHub Issues**: https://github.com/Hack23/euparliamentmonitor/issues
147
+ - **General Inquiries**: info@hack23.com
148
+
149
+ ---
150
+
151
+ Thank you for helping us keep the EU Parliament Monitor project and its users safe. Your contributions to our security posture are greatly appreciated!
package/package.json ADDED
@@ -0,0 +1,131 @@
1
+ {
2
+ "name": "euparliamentmonitor",
3
+ "version": "0.8.4",
4
+ "type": "module",
5
+ "description": "European Parliament Intelligence Platform - Monitor political activity with systematic transparency",
6
+ "main": "scripts/index.js",
7
+ "types": "scripts/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./scripts/index.js",
11
+ "types": "./scripts/index.d.ts"
12
+ }
13
+ },
14
+ "files": [
15
+ "scripts/",
16
+ "README.md",
17
+ "LICENSE",
18
+ "SECURITY.md"
19
+ ],
20
+ "publishConfig": {
21
+ "access": "public",
22
+ "provenance": true,
23
+ "registry": "https://registry.npmjs.org/"
24
+ },
25
+ "scripts": {
26
+ "prebuild": "node scripts/generators/news-indexes.js && node scripts/generators/sitemap.js",
27
+ "build": "tsc",
28
+ "build:check": "tsc --noEmit",
29
+ "build:check-tests": "tsc --project tsconfig.test.json --noEmit",
30
+ "copy-vendor": "mkdir -p js/vendor && cp node_modules/chart.js/dist/chart.umd.min.js js/vendor/ && cp node_modules/chartjs-plugin-annotation/dist/chartjs-plugin-annotation.min.js js/vendor/ && cp node_modules/d3/dist/d3.min.js js/vendor/",
31
+ "generate-news": "node scripts/generators/news-enhanced.js",
32
+ "generate-news-indexes": "node scripts/generators/news-indexes.js",
33
+ "generate-sitemap": "node scripts/generators/sitemap.js",
34
+ "fix-articles": "npx tsx src/utils/fix-articles.ts",
35
+ "validate-articles": "npx tsx src/utils/validate-articles.ts",
36
+ "validate-articles:strict": "npx tsx src/utils/validate-articles.ts --strict",
37
+ "validate-ep-api": "npx tsx src/utils/validate-ep-api.ts",
38
+ "htmlhint": "sh -c 'htmlhint *.html; set -- news/*.html; if [ -e \"$1\" ]; then htmlhint \"$@\"; else echo \"No news/*.html files to lint\"; fi'",
39
+ "serve": "python3 -m http.server 8080",
40
+ "test": "vitest run",
41
+ "test:watch": "vitest watch",
42
+ "test:ui": "vitest --ui",
43
+ "test:coverage": "vitest run --coverage",
44
+ "test:unit": "vitest run test/unit",
45
+ "test:integration": "vitest run test/integration",
46
+ "test:e2e": "playwright test",
47
+ "test:e2e:ui": "playwright test --ui",
48
+ "test:e2e:headed": "playwright test --headed",
49
+ "test:e2e:debug": "playwright test --debug",
50
+ "test:e2e:report": "playwright show-report",
51
+ "lint": "eslint src/",
52
+ "lint:fix": "eslint src/ --fix",
53
+ "lint:report": "eslint src/ --format json --output-file builds/test-results/eslint-report.json",
54
+ "lint:report:html": "eslint src/ --format html --output-file builds/test-results/eslint-report.html",
55
+ "format": "prettier --write \"src/**/*.ts\"",
56
+ "format:check": "prettier --check \"src/**/*.ts\"",
57
+ "docs:api": "typedoc",
58
+ "docs:copy-reports": "node scripts/utils/copy-test-reports.js",
59
+ "docs:index": "node scripts/utils/generate-docs-index.js",
60
+ "docs:generate": "npm run docs:api && npm run docs:copy-reports && npm run docs:index",
61
+ "prepare": "husky",
62
+ "prepublishOnly": "npm run lint && npm run test"
63
+ },
64
+ "repository": {
65
+ "type": "git",
66
+ "url": "git+https://github.com/Hack23/euparliamentmonitor.git"
67
+ },
68
+ "keywords": [
69
+ "european-parliament",
70
+ "parliament",
71
+ "europe",
72
+ "politics",
73
+ "osint",
74
+ "transparency",
75
+ "intelligence",
76
+ "mcp",
77
+ "model-context-protocol",
78
+ "open-data",
79
+ "typescript"
80
+ ],
81
+ "author": "Hack23 AB",
82
+ "license": "Apache-2.0",
83
+ "bugs": {
84
+ "url": "https://github.com/Hack23/euparliamentmonitor/issues"
85
+ },
86
+ "homepage": "https://euparliamentmonitor.com",
87
+ "devDependencies": {
88
+ "@axe-core/playwright": "^4.11.1",
89
+ "@eslint/js": "^10.0.1",
90
+ "@playwright/test": "^1.58.2",
91
+ "@types/d3": "^7.4.3",
92
+ "@types/node": "^25.5.0",
93
+ "@types/papaparse": "^5.5.2",
94
+ "@typescript-eslint/eslint-plugin": "^8.57.2",
95
+ "@typescript-eslint/parser": "^8.57.2",
96
+ "@vitest/coverage-v8": "^4.1.1",
97
+ "@vitest/ui": "^4.0.18",
98
+ "chart.js": "^4.5.1",
99
+ "chartjs-plugin-annotation": "^3.1.0",
100
+ "d3": "^7.9.0",
101
+ "eslint": "^10.1.0",
102
+ "eslint-config-prettier": "^10.1.8",
103
+ "eslint-plugin-jsdoc": "^62.8.0",
104
+ "eslint-plugin-security": "^4.0.0",
105
+ "eslint-plugin-sonarjs": "^4.0.2",
106
+ "happy-dom": "^20.8.7",
107
+ "htmlhint": "^1.9.2",
108
+ "husky": "^9.1.7",
109
+ "jscpd": "^4.0.8",
110
+ "lint-staged": "^16.4.0",
111
+ "papaparse": "^5.5.3",
112
+ "prettier": "^3.8.1",
113
+ "ts-api-utils": "^2.5.0",
114
+ "tsx": "^4.21.0",
115
+ "typedoc": "^0.28.18",
116
+ "typescript": "^5.9.3",
117
+ "vitest": "^4.0.18"
118
+ },
119
+ "engines": {
120
+ "node": ">=25"
121
+ },
122
+ "dependencies": {
123
+ "european-parliament-mcp-server": "^1.1.16"
124
+ },
125
+ "optionalDependencies": {
126
+ "worldbank-mcp": "^1.0.1"
127
+ },
128
+ "overrides": {
129
+ "flatted": ">=3.4.2"
130
+ }
131
+ }
@@ -0,0 +1,199 @@
1
+ /**
2
+ * @module Constants/CommitteeIndicatorMap
3
+ * @description Maps European Parliament committees and article categories to
4
+ * World Bank indicators for economic context enrichment.
5
+ *
6
+ * Each EP standing committee covers a specific policy domain. This module
7
+ * provides a declarative mapping from committee abbreviations (e.g. 'ECON',
8
+ * 'ENVI') and article categories (e.g. PROPOSITIONS, MONTH_AHEAD) to the
9
+ * World Bank indicators most relevant to their legislative mandates.
10
+ *
11
+ * Used by news generation strategies to automatically select the right
12
+ * economic indicators when enriching articles with World Bank data.
13
+ */
14
+ import { ArticleCategory, AnalysisPerspective } from '../types/common.js';
15
+ /**
16
+ * Extended set of World Bank indicator IDs relevant to EU Parliament policy areas.
17
+ * Superset of {@link PolicyRelevantIndicators} — includes domain-specific indicators
18
+ * that map to individual committee mandates.
19
+ */
20
+ export declare const WB_INDICATORS: {
21
+ /** GDP (current US$) */
22
+ readonly GDP: "NY.GDP.MKTP.CD";
23
+ /** GDP growth (annual %) */
24
+ readonly GDP_GROWTH: "NY.GDP.MKTP.KD.ZG";
25
+ /** GDP per capita (current US$) */
26
+ readonly GDP_PER_CAPITA: "NY.GDP.PCAP.CD";
27
+ /** GNI per capita, Atlas method (current US$) */
28
+ readonly GNI_PER_CAPITA: "NY.GNP.PCAP.CD";
29
+ /** Inflation, consumer prices (annual %) */
30
+ readonly INFLATION: "FP.CPI.TOTL.ZG";
31
+ /** Unemployment, total (% of total labor force) */
32
+ readonly UNEMPLOYMENT: "SL.UEM.TOTL.ZS";
33
+ /** Trade (% of GDP) */
34
+ readonly TRADE: "NE.TRD.GNFS.ZS";
35
+ /** Exports of goods and services (% of GDP) */
36
+ readonly EXPORTS_GDP: "NE.EXP.GNFS.ZS";
37
+ /** Foreign direct investment, net inflows (% of GDP) */
38
+ readonly FDI_NET: "BX.KLT.DINV.WD.GD.ZS";
39
+ /** CO2 emissions (metric tons per capita) */
40
+ readonly CO2_EMISSIONS: "EN.ATM.CO2E.PC";
41
+ /** Renewable energy consumption (% of total final energy consumption) */
42
+ readonly RENEWABLE_ENERGY: "EG.FEC.RNEW.ZS";
43
+ /** Energy use (kg of oil equivalent per capita) */
44
+ readonly ENERGY_USE: "EG.USE.PCAP.KG.OE";
45
+ /** Forest area (% of land area) */
46
+ readonly FOREST_AREA: "AG.LND.FRST.ZS";
47
+ /** Population, total */
48
+ readonly POPULATION: "SP.POP.TOTL";
49
+ /** Population growth (annual %) */
50
+ readonly POPULATION_GROWTH: "SP.POP.GROW";
51
+ /** Life expectancy at birth, total (years) */
52
+ readonly LIFE_EXPECTANCY: "SP.DYN.LE00.IN";
53
+ /** Net migration */
54
+ readonly NET_MIGRATION: "SM.POP.NETM";
55
+ /** Labor force participation rate, total (% of total population ages 15+) */
56
+ readonly LABOR_PARTICIPATION: "SL.TLF.CACT.ZS";
57
+ /** Employment to population ratio, 15+, total (%) */
58
+ readonly EMPLOYMENT_RATIO: "SL.EMP.TOTL.SP.ZS";
59
+ /** Youth unemployment rate (% of total labor force ages 15-24) */
60
+ readonly YOUTH_UNEMPLOYMENT: "SL.UEM.1524.ZS";
61
+ /** Research and development expenditure (% of GDP) */
62
+ readonly RD_EXPENDITURE: "GB.XPD.RSDV.GD.ZS";
63
+ /** Government expenditure on education, total (% of GDP) */
64
+ readonly EDUCATION_EXPENDITURE: "SE.XPD.TOTL.GD.ZS";
65
+ /** School enrollment, tertiary (% gross) */
66
+ readonly TERTIARY_ENROLLMENT: "SE.TER.ENRR";
67
+ /** Current health expenditure (% of GDP) */
68
+ readonly HEALTH_EXPENDITURE: "SH.XPD.CHEX.GD.ZS";
69
+ /** Hospital beds (per 1,000 people) */
70
+ readonly HOSPITAL_BEDS: "SH.MED.BEDS.ZS";
71
+ /** Agriculture, forestry, and fishing, value added (% of GDP) */
72
+ readonly AGRICULTURE_GDP: "NV.AGR.TOTL.ZS";
73
+ /** Cereal yield (kg per hectare) */
74
+ readonly CEREAL_YIELD: "AG.YLD.CREL.KG";
75
+ /** Arable land (% of land area) */
76
+ readonly ARABLE_LAND: "AG.LND.ARBL.ZS";
77
+ /** Tax revenue (% of GDP) */
78
+ readonly TAX_REVENUE: "GC.TAX.TOTL.GD.ZS";
79
+ /** General government final consumption expenditure (% of GDP) */
80
+ readonly GOV_EXPENDITURE: "NE.CON.GOVT.ZS";
81
+ /** Military expenditure (% of GDP) */
82
+ readonly MILITARY_EXPENDITURE: "MS.MIL.XPND.GD.ZS";
83
+ /** Individuals using the Internet (% of population) */
84
+ readonly INTERNET_USERS: "IT.NET.USER.ZS";
85
+ /** High-technology exports (% of manufactured exports) */
86
+ readonly HIGHTECH_EXPORTS: "TX.VAL.TECH.MF.ZS";
87
+ /** GINI index (World Bank estimate) */
88
+ readonly GINI_INDEX: "SI.POV.GINI";
89
+ };
90
+ /** World Bank indicator ID type — string literal union from WB_INDICATORS values */
91
+ export type WBIndicatorId = (typeof WB_INDICATORS)[keyof typeof WB_INDICATORS];
92
+ /**
93
+ * Describes why a specific World Bank indicator is relevant to a committee
94
+ * or article category, and how it should be used in news articles.
95
+ */
96
+ export interface IndicatorMapping {
97
+ /** World Bank indicator ID */
98
+ readonly indicatorId: WBIndicatorId;
99
+ /** Human-readable indicator name */
100
+ readonly name: string;
101
+ /** Why this indicator is relevant to the committee/category */
102
+ readonly relevance: string;
103
+ /** How to use this data in articles (contextual guidance for LLM/generator) */
104
+ readonly usage: string;
105
+ /** Priority: 'primary' indicators should always be fetched; 'secondary' are optional enrichment */
106
+ readonly priority: 'primary' | 'secondary';
107
+ }
108
+ /**
109
+ * Full mapping entry for a single EP committee.
110
+ */
111
+ export interface CommitteeIndicatorEntry {
112
+ /** Official committee name */
113
+ readonly name: string;
114
+ /** Committee abbreviation (e.g. 'ECON') */
115
+ readonly abbreviation: string;
116
+ /** Policy domain this committee covers */
117
+ readonly policyDomain: string;
118
+ /** Relevant analysis perspectives from AnalysisPerspective enum */
119
+ readonly analysisPerspectives: readonly AnalysisPerspective[];
120
+ /** World Bank indicators mapped to this committee */
121
+ readonly indicators: readonly IndicatorMapping[];
122
+ }
123
+ /**
124
+ * Maps EP committee abbreviations to their World Bank indicator mappings.
125
+ *
126
+ * Covers all 20 EP standing committees. Each entry includes:
127
+ * - Committee metadata (name, policy domain)
128
+ * - Primary indicators (core to the committee's mandate)
129
+ * - Secondary indicators (useful context)
130
+ * - Analysis perspectives for editorial framing
131
+ */
132
+ export declare const COMMITTEE_INDICATOR_MAP: Readonly<Record<string, CommitteeIndicatorEntry>>;
133
+ /**
134
+ * Maps an article category to recommended World Bank indicators.
135
+ */
136
+ export interface CategoryIndicatorEntry {
137
+ /** Article category value */
138
+ readonly category: ArticleCategory;
139
+ /** Description of how economic data enriches this article type */
140
+ readonly enrichmentStrategy: string;
141
+ /** Primary indicators — always fetch for this category */
142
+ readonly primaryIndicators: readonly IndicatorMapping[];
143
+ /** Secondary indicators — fetch when the article covers specific policy areas */
144
+ readonly secondaryIndicators: readonly IndicatorMapping[];
145
+ /** Maximum recommended World Bank MCP calls per article generation run */
146
+ readonly maxWBCalls: number;
147
+ }
148
+ /**
149
+ * Maps article categories to World Bank indicators for economic context enrichment.
150
+ *
151
+ * Not every article type benefits equally from economic data:
152
+ * - **PROPOSITIONS**: High value — legislative proposals often have direct economic impact
153
+ * - **MONTH_AHEAD/MONTH_IN_REVIEW**: High value — monthly economic overview adds depth
154
+ * - **COMMITTEE_REPORTS**: High value — each committee has domain-specific indicators
155
+ * - **WEEK_AHEAD/WEEK_IN_REVIEW**: Medium value — useful for contextualization
156
+ * - **MOTIONS**: Medium value — voting outcomes may relate to economic conditions
157
+ * - **BREAKING_NEWS**: Low value — urgency trumps enrichment
158
+ * - **DEEP_ANALYSIS**: High value — analytical depth benefits from data
159
+ */
160
+ export declare const CATEGORY_INDICATOR_MAP: Readonly<Record<ArticleCategory, CategoryIndicatorEntry>>;
161
+ /**
162
+ * Get World Bank indicators relevant to a specific EP committee.
163
+ *
164
+ * @param abbreviation - Committee abbreviation (e.g. 'ECON', 'ENVI')
165
+ * @returns Array of indicator mappings, or empty array if committee not found
166
+ */
167
+ export declare function getCommitteeIndicators(abbreviation: string): readonly IndicatorMapping[];
168
+ /**
169
+ * Get primary (must-fetch) indicators for a committee.
170
+ *
171
+ * @param abbreviation - Committee abbreviation
172
+ * @returns Array of primary indicator mappings
173
+ */
174
+ export declare function getCommitteePrimaryIndicators(abbreviation: string): readonly IndicatorMapping[];
175
+ /**
176
+ * Get World Bank indicators relevant to an article category.
177
+ *
178
+ * @param category - Article category
179
+ * @returns Category indicator entry with enrichment guidance
180
+ */
181
+ export declare function getCategoryIndicators(category: ArticleCategory): CategoryIndicatorEntry;
182
+ /**
183
+ * Get all unique indicator IDs needed for a set of committees.
184
+ * Useful for batch-fetching indicator data for multi-committee articles.
185
+ *
186
+ * @param abbreviations - Committee abbreviation array
187
+ * @param primaryOnly - If true, only return primary indicators
188
+ * @returns Deduplicated array of World Bank indicator IDs
189
+ */
190
+ export declare function getIndicatorIdsForCommittees(abbreviations: readonly string[], primaryOnly?: boolean): readonly string[];
191
+ /**
192
+ * Get all indicator IDs needed for an article category, including both
193
+ * primary and secondary indicators.
194
+ *
195
+ * @param category - Article category
196
+ * @returns Deduplicated array of World Bank indicator IDs
197
+ */
198
+ export declare function getAllCategoryIndicatorIds(category: ArticleCategory): readonly string[];
199
+ //# sourceMappingURL=committee-indicator-map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"committee-indicator-map.d.ts","sourceRoot":"","sources":["../../src/constants/committee-indicator-map.ts"],"names":[],"mappings":"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"}