@ansvar/us-regulations-mcp 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 (89) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +275 -0
  3. package/data/.gitkeep +0 -0
  4. package/data/regulations.db +0 -0
  5. package/data/seed/applicability/rules.json +74 -0
  6. package/data/seed/mappings/ccpa-nist-csf.json +144 -0
  7. package/data/seed/mappings/hipaa-nist-800-53.json +377 -0
  8. package/dist/index.d.ts +3 -0
  9. package/dist/index.d.ts.map +1 -0
  10. package/dist/index.js +41 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/ingest/adapters/california-leginfo.d.ts +72 -0
  13. package/dist/ingest/adapters/california-leginfo.d.ts.map +1 -0
  14. package/dist/ingest/adapters/california-leginfo.js +270 -0
  15. package/dist/ingest/adapters/california-leginfo.js.map +1 -0
  16. package/dist/ingest/adapters/ecfr.d.ts +76 -0
  17. package/dist/ingest/adapters/ecfr.d.ts.map +1 -0
  18. package/dist/ingest/adapters/ecfr.js +355 -0
  19. package/dist/ingest/adapters/ecfr.js.map +1 -0
  20. package/dist/ingest/adapters/regulations-gov.d.ts +47 -0
  21. package/dist/ingest/adapters/regulations-gov.d.ts.map +1 -0
  22. package/dist/ingest/adapters/regulations-gov.js +91 -0
  23. package/dist/ingest/adapters/regulations-gov.js.map +1 -0
  24. package/dist/ingest/framework.d.ts +84 -0
  25. package/dist/ingest/framework.d.ts.map +1 -0
  26. package/dist/ingest/framework.js +8 -0
  27. package/dist/ingest/framework.js.map +1 -0
  28. package/dist/tools/action-items.d.ts +23 -0
  29. package/dist/tools/action-items.d.ts.map +1 -0
  30. package/dist/tools/action-items.js +118 -0
  31. package/dist/tools/action-items.js.map +1 -0
  32. package/dist/tools/applicability.d.ts +26 -0
  33. package/dist/tools/applicability.d.ts.map +1 -0
  34. package/dist/tools/applicability.js +49 -0
  35. package/dist/tools/applicability.js.map +1 -0
  36. package/dist/tools/compare.d.ts +20 -0
  37. package/dist/tools/compare.d.ts.map +1 -0
  38. package/dist/tools/compare.js +35 -0
  39. package/dist/tools/compare.js.map +1 -0
  40. package/dist/tools/definitions.d.ts +22 -0
  41. package/dist/tools/definitions.d.ts.map +1 -0
  42. package/dist/tools/definitions.js +43 -0
  43. package/dist/tools/definitions.js.map +1 -0
  44. package/dist/tools/evidence.d.ts +23 -0
  45. package/dist/tools/evidence.d.ts.map +1 -0
  46. package/dist/tools/evidence.js +27 -0
  47. package/dist/tools/evidence.js.map +1 -0
  48. package/dist/tools/list.d.ts +25 -0
  49. package/dist/tools/list.d.ts.map +1 -0
  50. package/dist/tools/list.js +66 -0
  51. package/dist/tools/list.js.map +1 -0
  52. package/dist/tools/map.d.ts +26 -0
  53. package/dist/tools/map.d.ts.map +1 -0
  54. package/dist/tools/map.js +58 -0
  55. package/dist/tools/map.js.map +1 -0
  56. package/dist/tools/registry.d.ts +19 -0
  57. package/dist/tools/registry.d.ts.map +1 -0
  58. package/dist/tools/registry.js +260 -0
  59. package/dist/tools/registry.js.map +1 -0
  60. package/dist/tools/search.d.ts +15 -0
  61. package/dist/tools/search.d.ts.map +1 -0
  62. package/dist/tools/search.js +94 -0
  63. package/dist/tools/search.js.map +1 -0
  64. package/dist/tools/section.d.ts +19 -0
  65. package/dist/tools/section.d.ts.map +1 -0
  66. package/dist/tools/section.js +50 -0
  67. package/dist/tools/section.js.map +1 -0
  68. package/package.json +76 -0
  69. package/scripts/build-db.ts +268 -0
  70. package/scripts/ingest.ts +214 -0
  71. package/scripts/load-seed-data.ts +133 -0
  72. package/scripts/quality-test.ts +346 -0
  73. package/scripts/test-mcp-tools.ts +187 -0
  74. package/scripts/test-remaining-tools.ts +107 -0
  75. package/src/index.ts +55 -0
  76. package/src/ingest/adapters/california-leginfo.ts +322 -0
  77. package/src/ingest/adapters/ecfr.ts +403 -0
  78. package/src/ingest/adapters/regulations-gov.ts +112 -0
  79. package/src/ingest/framework.ts +92 -0
  80. package/src/tools/action-items.ts +164 -0
  81. package/src/tools/applicability.ts +91 -0
  82. package/src/tools/compare.ts +61 -0
  83. package/src/tools/definitions.ts +79 -0
  84. package/src/tools/evidence.ts +53 -0
  85. package/src/tools/list.ts +120 -0
  86. package/src/tools/map.ts +100 -0
  87. package/src/tools/registry.ts +275 -0
  88. package/src/tools/search.ts +132 -0
  89. package/src/tools/section.ts +85 -0
@@ -0,0 +1,377 @@
1
+ {
2
+ "framework": "NIST_800_53_R5",
3
+ "regulation": "HIPAA",
4
+ "generated_at": "2026-01-29",
5
+ "generated_by": "claude-sonnet-4-5",
6
+ "description": "Mapping of HIPAA Security Rule requirements to NIST 800-53 Rev 5 controls",
7
+ "mappings": [
8
+ {
9
+ "section_number": "164.308(a)(1)",
10
+ "control_id": "RA-1",
11
+ "control_name": "Risk Assessment Policy and Procedures",
12
+ "coverage": "full",
13
+ "confidence": 95,
14
+ "rationale": "HIPAA requires security management process including risk analysis"
15
+ },
16
+ {
17
+ "section_number": "164.308(a)(1)(ii)(A)",
18
+ "control_id": "RA-3",
19
+ "control_name": "Risk Assessment",
20
+ "coverage": "full",
21
+ "confidence": 98,
22
+ "rationale": "Directly requires risk assessment of ePHI threats and vulnerabilities"
23
+ },
24
+ {
25
+ "section_number": "164.308(a)(1)(ii)(B)",
26
+ "control_id": "RA-5",
27
+ "control_name": "Vulnerability Monitoring and Scanning",
28
+ "coverage": "partial",
29
+ "confidence": 85,
30
+ "rationale": "Risk management requires ongoing vulnerability identification"
31
+ },
32
+ {
33
+ "section_number": "164.308(a)(3)",
34
+ "control_id": "AC-1",
35
+ "control_name": "Access Control Policy and Procedures",
36
+ "coverage": "full",
37
+ "confidence": 97,
38
+ "rationale": "HIPAA requires workforce access control policies and procedures"
39
+ },
40
+ {
41
+ "section_number": "164.308(a)(3)(ii)(A)",
42
+ "control_id": "AC-2",
43
+ "control_name": "Account Management",
44
+ "coverage": "partial",
45
+ "confidence": 90,
46
+ "rationale": "Requires procedures for granting access to ePHI"
47
+ },
48
+ {
49
+ "section_number": "164.308(a)(3)(ii)(B)",
50
+ "control_id": "AC-5",
51
+ "control_name": "Separation of Duties",
52
+ "coverage": "related",
53
+ "confidence": 75,
54
+ "rationale": "Workforce clearance procedures relate to separation of duties"
55
+ },
56
+ {
57
+ "section_number": "164.308(a)(3)(ii)(C)",
58
+ "control_id": "AC-6",
59
+ "control_name": "Least Privilege",
60
+ "coverage": "partial",
61
+ "confidence": 88,
62
+ "rationale": "Requires termination procedures limiting access rights"
63
+ },
64
+ {
65
+ "section_number": "164.308(a)(4)",
66
+ "control_id": "AT-1",
67
+ "control_name": "Security Awareness and Training Policy",
68
+ "coverage": "full",
69
+ "confidence": 96,
70
+ "rationale": "HIPAA mandates security awareness and training program"
71
+ },
72
+ {
73
+ "section_number": "164.308(a)(5)(ii)(B)",
74
+ "control_id": "AU-6",
75
+ "control_name": "Audit Record Review, Analysis, and Reporting",
76
+ "coverage": "partial",
77
+ "confidence": 82,
78
+ "rationale": "Protection from malicious software requires log monitoring"
79
+ },
80
+ {
81
+ "section_number": "164.308(a)(5)(ii)(C)",
82
+ "control_id": "AU-2",
83
+ "control_name": "Event Logging",
84
+ "coverage": "partial",
85
+ "confidence": 85,
86
+ "rationale": "Log-in monitoring procedures require event logging"
87
+ },
88
+ {
89
+ "section_number": "164.308(a)(6)",
90
+ "control_id": "IR-1",
91
+ "control_name": "Incident Response Policy and Procedures",
92
+ "coverage": "full",
93
+ "confidence": 94,
94
+ "rationale": "HIPAA requires security incident procedures"
95
+ },
96
+ {
97
+ "section_number": "164.308(a)(6)(ii)",
98
+ "control_id": "IR-4",
99
+ "control_name": "Incident Handling",
100
+ "coverage": "full",
101
+ "confidence": 93,
102
+ "rationale": "Requires identifying and responding to security incidents"
103
+ },
104
+ {
105
+ "section_number": "164.308(a)(7)",
106
+ "control_id": "CP-1",
107
+ "control_name": "Contingency Planning Policy and Procedures",
108
+ "coverage": "full",
109
+ "confidence": 95,
110
+ "rationale": "HIPAA mandates contingency plan for emergencies"
111
+ },
112
+ {
113
+ "section_number": "164.308(a)(7)(ii)(A)",
114
+ "control_id": "CP-2",
115
+ "control_name": "Contingency Plan",
116
+ "coverage": "full",
117
+ "confidence": 94,
118
+ "rationale": "Requires data backup plan"
119
+ },
120
+ {
121
+ "section_number": "164.308(a)(7)(ii)(B)",
122
+ "control_id": "CP-9",
123
+ "control_name": "System Backup",
124
+ "coverage": "full",
125
+ "confidence": 96,
126
+ "rationale": "Requires disaster recovery plan with backups"
127
+ },
128
+ {
129
+ "section_number": "164.308(a)(7)(ii)(D)",
130
+ "control_id": "CP-10",
131
+ "control_name": "System Recovery and Reconstitution",
132
+ "coverage": "full",
133
+ "confidence": 92,
134
+ "rationale": "Requires emergency mode operation plan"
135
+ },
136
+ {
137
+ "section_number": "164.308(a)(8)",
138
+ "control_id": "CA-2",
139
+ "control_name": "Control Assessments",
140
+ "coverage": "partial",
141
+ "confidence": 80,
142
+ "rationale": "Evaluation standard requires periodic technical and non-technical assessments"
143
+ },
144
+ {
145
+ "section_number": "164.308(b)(1)",
146
+ "control_id": "SA-9",
147
+ "control_name": "External System Services",
148
+ "coverage": "partial",
149
+ "confidence": 87,
150
+ "rationale": "Business associate contracts govern external service providers"
151
+ },
152
+ {
153
+ "section_number": "164.312(a)(1)",
154
+ "control_id": "AC-3",
155
+ "control_name": "Access Enforcement",
156
+ "coverage": "full",
157
+ "confidence": 95,
158
+ "rationale": "Technical controls must enforce access authorization"
159
+ },
160
+ {
161
+ "section_number": "164.312(a)(2)(i)",
162
+ "control_id": "IA-2",
163
+ "control_name": "Identification and Authentication",
164
+ "coverage": "full",
165
+ "confidence": 97,
166
+ "rationale": "Requires unique user identification for ePHI access"
167
+ },
168
+ {
169
+ "section_number": "164.312(a)(2)(iii)",
170
+ "control_id": "AC-12",
171
+ "control_name": "Session Termination",
172
+ "coverage": "full",
173
+ "confidence": 91,
174
+ "rationale": "Requires automatic logoff after predetermined time"
175
+ },
176
+ {
177
+ "section_number": "164.312(a)(2)(iv)",
178
+ "control_id": "SC-10",
179
+ "control_name": "Network Disconnect",
180
+ "coverage": "partial",
181
+ "confidence": 78,
182
+ "rationale": "Encryption and decryption relates to secure connections"
183
+ },
184
+ {
185
+ "section_number": "164.312(b)",
186
+ "control_id": "AU-9",
187
+ "control_name": "Protection of Audit Information",
188
+ "coverage": "partial",
189
+ "confidence": 86,
190
+ "rationale": "Audit controls protect log integrity"
191
+ },
192
+ {
193
+ "section_number": "164.312(c)(1)",
194
+ "control_id": "SC-13",
195
+ "control_name": "Cryptographic Protection",
196
+ "coverage": "partial",
197
+ "confidence": 88,
198
+ "rationale": "Integrity controls for ePHI authentication"
199
+ },
200
+ {
201
+ "section_number": "164.312(d)",
202
+ "control_id": "PE-3",
203
+ "control_name": "Physical Access Control",
204
+ "coverage": "related",
205
+ "confidence": 72,
206
+ "rationale": "Person or entity authentication relates to physical access"
207
+ },
208
+ {
209
+ "section_number": "164.312(e)(1)",
210
+ "control_id": "SC-8",
211
+ "control_name": "Transmission Confidentiality and Integrity",
212
+ "coverage": "full",
213
+ "confidence": 94,
214
+ "rationale": "Technical security measures for ePHI transmission"
215
+ },
216
+ {
217
+ "section_number": "164.312(e)(2)(i)",
218
+ "control_id": "IA-5",
219
+ "control_name": "Authenticator Management",
220
+ "coverage": "partial",
221
+ "confidence": 83,
222
+ "rationale": "Integrity controls ensure authentication mechanisms"
223
+ },
224
+ {
225
+ "section_number": "164.312(e)(2)(ii)",
226
+ "control_id": "SC-8(1)",
227
+ "control_name": "Transmission Confidentiality - Cryptographic Protection",
228
+ "coverage": "partial",
229
+ "confidence": 89,
230
+ "rationale": "Encryption addressable specification for transmission security"
231
+ },
232
+ {
233
+ "section_number": "164.310(a)(1)",
234
+ "control_id": "PE-2",
235
+ "control_name": "Physical Access Authorizations",
236
+ "coverage": "full",
237
+ "confidence": 93,
238
+ "rationale": "HIPAA requires facility access controls"
239
+ },
240
+ {
241
+ "section_number": "164.310(a)(2)(ii)",
242
+ "control_id": "PE-6",
243
+ "control_name": "Monitoring Physical Access",
244
+ "coverage": "partial",
245
+ "confidence": 84,
246
+ "rationale": "Facility security plan includes access monitoring"
247
+ },
248
+ {
249
+ "section_number": "164.310(b)",
250
+ "control_id": "PE-16",
251
+ "control_name": "Delivery and Removal",
252
+ "coverage": "related",
253
+ "confidence": 74,
254
+ "rationale": "Workstation use standard relates to equipment controls"
255
+ },
256
+ {
257
+ "section_number": "164.310(c)",
258
+ "control_id": "PE-17",
259
+ "control_name": "Alternate Work Site",
260
+ "coverage": "partial",
261
+ "confidence": 79,
262
+ "rationale": "Workstation security addresses location-based controls"
263
+ },
264
+ {
265
+ "section_number": "164.310(d)(1)",
266
+ "control_id": "MP-6",
267
+ "control_name": "Media Sanitization",
268
+ "coverage": "full",
269
+ "confidence": 92,
270
+ "rationale": "Device and media controls require sanitization procedures"
271
+ },
272
+ {
273
+ "section_number": "164.310(d)(2)(i)",
274
+ "control_id": "MP-5",
275
+ "control_name": "Media Transport",
276
+ "coverage": "partial",
277
+ "confidence": 81,
278
+ "rationale": "Disposal procedures include secure media handling"
279
+ },
280
+ {
281
+ "section_number": "164.310(d)(2)(iii)",
282
+ "control_id": "MP-2",
283
+ "control_name": "Media Access",
284
+ "coverage": "partial",
285
+ "confidence": 76,
286
+ "rationale": "Accountability standard relates to media access controls"
287
+ },
288
+ {
289
+ "section_number": "164.308(a)(4)(ii)(A)",
290
+ "control_id": "AT-2",
291
+ "control_name": "Literacy Training and Awareness",
292
+ "coverage": "full",
293
+ "confidence": 91,
294
+ "rationale": "Security reminders required for workforce"
295
+ },
296
+ {
297
+ "section_number": "164.308(a)(4)(ii)(B)",
298
+ "control_id": "AT-3",
299
+ "control_name": "Role-Based Training",
300
+ "coverage": "partial",
301
+ "confidence": 85,
302
+ "rationale": "Protection from malicious software training relates to role-based security"
303
+ },
304
+ {
305
+ "section_number": "164.308(a)(4)(ii)(C)",
306
+ "control_id": "AT-4",
307
+ "control_name": "Training Records",
308
+ "coverage": "related",
309
+ "confidence": 70,
310
+ "rationale": "Log-in monitoring relates to documenting training"
311
+ },
312
+ {
313
+ "section_number": "164.314(a)(1)",
314
+ "control_id": "SA-9(2)",
315
+ "control_name": "External System Services - Identification of Functions",
316
+ "coverage": "partial",
317
+ "confidence": 82,
318
+ "rationale": "Business associate agreements specify service functions"
319
+ },
320
+ {
321
+ "section_number": "164.314(a)(2)(i)",
322
+ "control_id": "CA-3",
323
+ "control_name": "Information Exchange",
324
+ "coverage": "partial",
325
+ "confidence": 78,
326
+ "rationale": "Data use agreements govern information exchange"
327
+ },
328
+ {
329
+ "section_number": "164.316(a)",
330
+ "control_id": "PL-1",
331
+ "control_name": "Policy and Procedures",
332
+ "coverage": "full",
333
+ "confidence": 96,
334
+ "rationale": "HIPAA mandates security policies and procedures"
335
+ },
336
+ {
337
+ "section_number": "164.316(b)(1)",
338
+ "control_id": "CM-3",
339
+ "control_name": "Configuration Change Control",
340
+ "coverage": "partial",
341
+ "confidence": 77,
342
+ "rationale": "Documentation requirements include change management"
343
+ },
344
+ {
345
+ "section_number": "164.316(b)(2)(i)",
346
+ "control_id": "AU-11",
347
+ "control_name": "Audit Record Retention",
348
+ "coverage": "full",
349
+ "confidence": 90,
350
+ "rationale": "HIPAA requires 6-year retention of documentation"
351
+ },
352
+ {
353
+ "section_number": "164.308(a)(2)",
354
+ "control_id": "PS-2",
355
+ "control_name": "Position Risk Designation",
356
+ "coverage": "related",
357
+ "confidence": 73,
358
+ "rationale": "Assigned security responsibility relates to position risk"
359
+ },
360
+ {
361
+ "section_number": "164.308(a)(3)(i)",
362
+ "control_id": "AC-1",
363
+ "control_name": "Access Control Policy",
364
+ "coverage": "full",
365
+ "confidence": 94,
366
+ "rationale": "Authorization/supervision standard requires access policies"
367
+ },
368
+ {
369
+ "section_number": "164.308(a)(5)(ii)(A)",
370
+ "control_id": "SI-3",
371
+ "control_name": "Malicious Code Protection",
372
+ "coverage": "partial",
373
+ "confidence": 87,
374
+ "rationale": "Protection from malicious software procedures"
375
+ }
376
+ ]
377
+ }
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env node
2
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
3
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
4
+ import Database from 'better-sqlite3';
5
+ import { fileURLToPath } from 'url';
6
+ import { dirname, join } from 'path';
7
+ import { registerTools } from './tools/registry.js';
8
+ const __filename = fileURLToPath(import.meta.url);
9
+ const __dirname = dirname(__filename);
10
+ // Database path - look for regulations.db in data folder
11
+ const DB_PATH = process.env.US_COMPLIANCE_DB_PATH || join(__dirname, '..', 'data', 'regulations.db');
12
+ function getDatabase() {
13
+ try {
14
+ return new Database(DB_PATH, { readonly: true });
15
+ }
16
+ catch (error) {
17
+ throw new Error(`Failed to open database at ${DB_PATH}: ${error}`);
18
+ }
19
+ }
20
+ const db = getDatabase();
21
+ const server = new Server({
22
+ name: 'us-regulations-mcp',
23
+ version: '0.1.0',
24
+ }, {
25
+ capabilities: {
26
+ tools: {},
27
+ },
28
+ });
29
+ // Register all tools using shared registry
30
+ registerTools(server, db);
31
+ // Start the server
32
+ async function main() {
33
+ const transport = new StdioServerTransport();
34
+ await server.connect(transport);
35
+ console.error('US Regulations MCP server started');
36
+ }
37
+ main().catch((error) => {
38
+ console.error('Fatal error:', error);
39
+ process.exit(1);
40
+ });
41
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAKjF,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAErC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,yDAAyD;AACzD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAErG,SAAS,WAAW;IAClB,IAAI,CAAC;QACH,OAAO,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,8BAA8B,OAAO,KAAK,KAAK,EAAE,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAED,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;AACzB,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB;IACE,IAAI,EAAE,oBAAoB;IAC1B,OAAO,EAAE,OAAO;CACjB,EACD;IACE,YAAY,EAAE;QACZ,KAAK,EAAE,EAAE;KACV;CACF,CACF,CAAC;AAEF,2CAA2C;AAC3C,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAE1B,mBAAmB;AACnB,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;AACrD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * California Legislative Information Adapter
3
+ *
4
+ * Fetches CCPA/CPRA regulations from California LegInfo.
5
+ * Source: California Civil Code § 1798.100-1798.199
6
+ *
7
+ * PRODUCTION IMPLEMENTATION
8
+ * Uses HTML scraping with fail-fast DOM validation
9
+ */
10
+ import { SourceAdapter, RegulationMetadata, Section, Definition, UpdateStatus } from '../framework.js';
11
+ /**
12
+ * Adapter for fetching CCPA/CPRA from California Legislative Information
13
+ */
14
+ export declare class CaliforniaLeginfoAdapter implements SourceAdapter {
15
+ private readonly regulationId;
16
+ private readonly civilCodeStart;
17
+ private readonly civilCodeEnd;
18
+ constructor(regulationId: string, civilCodeStart: number, civilCodeEnd: number);
19
+ /**
20
+ * Fetch CCPA metadata
21
+ *
22
+ * PLACEHOLDER: Returns hardcoded CCPA metadata
23
+ * TODO: Integrate with California LegInfo to fetch live metadata
24
+ */
25
+ fetchMetadata(): Promise<RegulationMetadata>;
26
+ /**
27
+ * Fetch all CCPA sections
28
+ *
29
+ * Scrapes HTML from California LegInfo with fail-fast validation
30
+ * Source: https://leginfo.legislature.ca.gov/faces/codes.xhtml
31
+ */
32
+ fetchSections(): AsyncGenerator<Section[]>;
33
+ /**
34
+ * Validate DOM structure with fail-fast assertions
35
+ */
36
+ private validateDOM;
37
+ /**
38
+ * Parse section from HTML
39
+ */
40
+ private parseSection;
41
+ /**
42
+ * Extract cross-references from text
43
+ */
44
+ private extractCrossReferences;
45
+ /**
46
+ * Fetch with retry logic and exponential backoff
47
+ */
48
+ private fetchWithRetry;
49
+ /**
50
+ * Sleep helper
51
+ */
52
+ private sleep;
53
+ /**
54
+ * Check for updates since last fetch
55
+ *
56
+ * Checks California LegInfo for amendments to Civil Code § 1798
57
+ * Note: This is best-effort since there's no official API
58
+ */
59
+ checkForUpdates(lastFetched: Date): Promise<UpdateStatus>;
60
+ /**
61
+ * Extract definitions from CCPA sections
62
+ *
63
+ * Future enhancement: Parse definition sections (primarily § 1798.140)
64
+ * For now, returns empty array - definitions can be added manually if needed
65
+ */
66
+ extractDefinitions(): Promise<Definition[]>;
67
+ }
68
+ /**
69
+ * Factory function to create CCPA adapter
70
+ */
71
+ export declare function createCcpaAdapter(): CaliforniaLeginfoAdapter;
72
+ //# sourceMappingURL=california-leginfo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"california-leginfo.d.ts","sourceRoot":"","sources":["../../../src/ingest/adapters/california-leginfo.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,OAAO,EACP,UAAU,EACV,YAAY,EACb,MAAM,iBAAiB,CAAC;AAqBzB;;GAEG;AACH,qBAAa,wBAAyB,YAAW,aAAa;IAC5D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAE1B,YAAY,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM;IAM9E;;;;;OAKG;IACG,aAAa,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAclD;;;;;OAKG;IACI,aAAa,IAAI,cAAc,CAAC,OAAO,EAAE,CAAC;IA2DjD;;OAEG;IACH,OAAO,CAAC,WAAW;IAgBnB;;OAEG;IACH,OAAO,CAAC,YAAY;IA0CpB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAmB9B;;OAEG;YACW,cAAc;IA4B5B;;OAEG;IACH,OAAO,CAAC,KAAK;IAIb;;;;;OAKG;IACG,eAAe,CAAC,WAAW,EAAE,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC;IAmC/D;;;;;OAKG;IACG,kBAAkB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;CAOlD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,wBAAwB,CAE5D"}