heor-agent-mcp 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +152 -0
- package/dist/audit/builder.d.ts +8 -0
- package/dist/audit/builder.d.ts.map +1 -0
- package/dist/audit/builder.js +37 -0
- package/dist/audit/builder.js.map +1 -0
- package/dist/audit/types.d.ts +30 -0
- package/dist/audit/types.d.ts.map +1 -0
- package/dist/audit/types.js +2 -0
- package/dist/audit/types.js.map +1 -0
- package/dist/formatters/docx.d.ts +5 -0
- package/dist/formatters/docx.d.ts.map +1 -0
- package/dist/formatters/docx.js +207 -0
- package/dist/formatters/docx.js.map +1 -0
- package/dist/formatters/json.d.ts +4 -0
- package/dist/formatters/json.d.ts.map +1 -0
- package/dist/formatters/json.js +4 -0
- package/dist/formatters/json.js.map +1 -0
- package/dist/formatters/markdown.d.ts +5 -0
- package/dist/formatters/markdown.d.ts.map +1 -0
- package/dist/formatters/markdown.js +50 -0
- package/dist/formatters/markdown.js.map +1 -0
- package/dist/knowledge/index.d.ts +8 -0
- package/dist/knowledge/index.d.ts.map +1 -0
- package/dist/knowledge/index.js +8 -0
- package/dist/knowledge/index.js.map +1 -0
- package/dist/knowledge/paths.d.ts +9 -0
- package/dist/knowledge/paths.d.ts.map +1 -0
- package/dist/knowledge/paths.js +35 -0
- package/dist/knowledge/paths.js.map +1 -0
- package/dist/knowledge/projectStore.d.ts +37 -0
- package/dist/knowledge/projectStore.d.ts.map +1 -0
- package/dist/knowledge/projectStore.js +112 -0
- package/dist/knowledge/projectStore.js.map +1 -0
- package/dist/knowledge/rawStore.d.ts +18 -0
- package/dist/knowledge/rawStore.d.ts.map +1 -0
- package/dist/knowledge/rawStore.js +103 -0
- package/dist/knowledge/rawStore.js.map +1 -0
- package/dist/knowledge/search.d.ts +19 -0
- package/dist/knowledge/search.d.ts.map +1 -0
- package/dist/knowledge/search.js +105 -0
- package/dist/knowledge/search.js.map +1 -0
- package/dist/knowledge/types.d.ts +6 -0
- package/dist/knowledge/types.d.ts.map +1 -0
- package/dist/knowledge/types.js +2 -0
- package/dist/knowledge/types.js.map +1 -0
- package/dist/knowledge/wikiStore.d.ts +18 -0
- package/dist/knowledge/wikiStore.d.ts.map +1 -0
- package/dist/knowledge/wikiStore.js +77 -0
- package/dist/knowledge/wikiStore.js.map +1 -0
- package/dist/knowledge/yaml.d.ts +17 -0
- package/dist/knowledge/yaml.d.ts.map +1 -0
- package/dist/knowledge/yaml.js +131 -0
- package/dist/knowledge/yaml.js.map +1 -0
- package/dist/models/distributions.d.ts +28 -0
- package/dist/models/distributions.d.ts.map +1 -0
- package/dist/models/distributions.js +99 -0
- package/dist/models/distributions.js.map +1 -0
- package/dist/models/index.d.ts +11 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/models/index.js +7 -0
- package/dist/models/index.js.map +1 -0
- package/dist/models/markov.d.ts +42 -0
- package/dist/models/markov.d.ts.map +1 -0
- package/dist/models/markov.js +82 -0
- package/dist/models/markov.js.map +1 -0
- package/dist/models/modelUtils.d.ts +29 -0
- package/dist/models/modelUtils.d.ts.map +1 -0
- package/dist/models/modelUtils.js +139 -0
- package/dist/models/modelUtils.js.map +1 -0
- package/dist/models/owsa.d.ts +31 -0
- package/dist/models/owsa.d.ts.map +1 -0
- package/dist/models/owsa.js +103 -0
- package/dist/models/owsa.js.map +1 -0
- package/dist/models/partsa.d.ts +40 -0
- package/dist/models/partsa.d.ts.map +1 -0
- package/dist/models/partsa.js +65 -0
- package/dist/models/partsa.js.map +1 -0
- package/dist/models/psa.d.ts +33 -0
- package/dist/models/psa.d.ts.map +1 -0
- package/dist/models/psa.js +118 -0
- package/dist/models/psa.js.map +1 -0
- package/dist/providers/direct/aifa.d.ts +3 -0
- package/dist/providers/direct/aifa.d.ts.map +1 -0
- package/dist/providers/direct/aifa.js +30 -0
- package/dist/providers/direct/aifa.js.map +1 -0
- package/dist/providers/direct/allOfUs.d.ts +3 -0
- package/dist/providers/direct/allOfUs.d.ts.map +1 -0
- package/dist/providers/direct/allOfUs.js +37 -0
- package/dist/providers/direct/allOfUs.js.map +1 -0
- package/dist/providers/direct/anvisa.d.ts +3 -0
- package/dist/providers/direct/anvisa.d.ts.map +1 -0
- package/dist/providers/direct/anvisa.js +25 -0
- package/dist/providers/direct/anvisa.js.map +1 -0
- package/dist/providers/direct/biorxiv.d.ts +3 -0
- package/dist/providers/direct/biorxiv.d.ts.map +1 -0
- package/dist/providers/direct/biorxiv.js +33 -0
- package/dist/providers/direct/biorxiv.js.map +1 -0
- package/dist/providers/direct/bnf.d.ts +3 -0
- package/dist/providers/direct/bnf.d.ts.map +1 -0
- package/dist/providers/direct/bnf.js +30 -0
- package/dist/providers/direct/bnf.js.map +1 -0
- package/dist/providers/direct/cadthReviews.d.ts +3 -0
- package/dist/providers/direct/cadthReviews.d.ts.map +1 -0
- package/dist/providers/direct/cadthReviews.js +30 -0
- package/dist/providers/direct/cadthReviews.js.map +1 -0
- package/dist/providers/direct/chembl.d.ts +3 -0
- package/dist/providers/direct/chembl.d.ts.map +1 -0
- package/dist/providers/direct/chembl.js +24 -0
- package/dist/providers/direct/chembl.js.map +1 -0
- package/dist/providers/direct/citeline.d.ts +3 -0
- package/dist/providers/direct/citeline.d.ts.map +1 -0
- package/dist/providers/direct/citeline.js +50 -0
- package/dist/providers/direct/citeline.js.map +1 -0
- package/dist/providers/direct/clinicalTrials.d.ts +3 -0
- package/dist/providers/direct/clinicalTrials.d.ts.map +1 -0
- package/dist/providers/direct/clinicalTrials.js +29 -0
- package/dist/providers/direct/clinicalTrials.js.map +1 -0
- package/dist/providers/direct/cmsNadac.d.ts +3 -0
- package/dist/providers/direct/cmsNadac.d.ts.map +1 -0
- package/dist/providers/direct/cmsNadac.js +52 -0
- package/dist/providers/direct/cmsNadac.js.map +1 -0
- package/dist/providers/direct/cochrane.d.ts +3 -0
- package/dist/providers/direct/cochrane.d.ts.map +1 -0
- package/dist/providers/direct/cochrane.js +46 -0
- package/dist/providers/direct/cochrane.js.map +1 -0
- package/dist/providers/direct/conitec.d.ts +3 -0
- package/dist/providers/direct/conitec.d.ts.map +1 -0
- package/dist/providers/direct/conitec.js +25 -0
- package/dist/providers/direct/conitec.js.map +1 -0
- package/dist/providers/direct/cortellis.d.ts +3 -0
- package/dist/providers/direct/cortellis.d.ts.map +1 -0
- package/dist/providers/direct/cortellis.js +52 -0
- package/dist/providers/direct/cortellis.js.map +1 -0
- package/dist/providers/direct/datasus.d.ts +3 -0
- package/dist/providers/direct/datasus.d.ts.map +1 -0
- package/dist/providers/direct/datasus.js +30 -0
- package/dist/providers/direct/datasus.js.map +1 -0
- package/dist/providers/direct/embase.d.ts +3 -0
- package/dist/providers/direct/embase.d.ts.map +1 -0
- package/dist/providers/direct/embase.js +54 -0
- package/dist/providers/direct/embase.js.map +1 -0
- package/dist/providers/direct/fonasa.d.ts +3 -0
- package/dist/providers/direct/fonasa.d.ts.map +1 -0
- package/dist/providers/direct/fonasa.js +25 -0
- package/dist/providers/direct/fonasa.js.map +1 -0
- package/dist/providers/direct/gbaDecisions.d.ts +3 -0
- package/dist/providers/direct/gbaDecisions.d.ts.map +1 -0
- package/dist/providers/direct/gbaDecisions.js +30 -0
- package/dist/providers/direct/gbaDecisions.js.map +1 -0
- package/dist/providers/direct/googleScholar.d.ts +3 -0
- package/dist/providers/direct/googleScholar.d.ts.map +1 -0
- package/dist/providers/direct/googleScholar.js +39 -0
- package/dist/providers/direct/googleScholar.js.map +1 -0
- package/dist/providers/direct/hasTc.d.ts +3 -0
- package/dist/providers/direct/hasTc.d.ts.map +1 -0
- package/dist/providers/direct/hasTc.js +30 -0
- package/dist/providers/direct/hasTc.js.map +1 -0
- package/dist/providers/direct/hitap.d.ts +3 -0
- package/dist/providers/direct/hitap.d.ts.map +1 -0
- package/dist/providers/direct/hitap.js +30 -0
- package/dist/providers/direct/hitap.js.map +1 -0
- package/dist/providers/direct/icerReports.d.ts +3 -0
- package/dist/providers/direct/icerReports.d.ts.map +1 -0
- package/dist/providers/direct/icerReports.js +30 -0
- package/dist/providers/direct/icerReports.js.map +1 -0
- package/dist/providers/direct/iets.d.ts +3 -0
- package/dist/providers/direct/iets.d.ts.map +1 -0
- package/dist/providers/direct/iets.js +25 -0
- package/dist/providers/direct/iets.js.map +1 -0
- package/dist/providers/direct/ihmeGbd.d.ts +3 -0
- package/dist/providers/direct/ihmeGbd.d.ts.map +1 -0
- package/dist/providers/direct/ihmeGbd.js +74 -0
- package/dist/providers/direct/ihmeGbd.js.map +1 -0
- package/dist/providers/direct/index.d.ts +7 -0
- package/dist/providers/direct/index.d.ts.map +1 -0
- package/dist/providers/direct/index.js +186 -0
- package/dist/providers/direct/index.js.map +1 -0
- package/dist/providers/direct/inesss.d.ts +3 -0
- package/dist/providers/direct/inesss.d.ts.map +1 -0
- package/dist/providers/direct/inesss.js +30 -0
- package/dist/providers/direct/inesss.js.map +1 -0
- package/dist/providers/direct/iqwig.d.ts +3 -0
- package/dist/providers/direct/iqwig.d.ts.map +1 -0
- package/dist/providers/direct/iqwig.js +30 -0
- package/dist/providers/direct/iqwig.js.map +1 -0
- package/dist/providers/direct/ispor.d.ts +3 -0
- package/dist/providers/direct/ispor.d.ts.map +1 -0
- package/dist/providers/direct/ispor.js +35 -0
- package/dist/providers/direct/ispor.js.map +1 -0
- package/dist/providers/direct/nhsCosts.d.ts +3 -0
- package/dist/providers/direct/nhsCosts.d.ts.map +1 -0
- package/dist/providers/direct/nhsCosts.js +32 -0
- package/dist/providers/direct/nhsCosts.js.map +1 -0
- package/dist/providers/direct/niceTa.d.ts +3 -0
- package/dist/providers/direct/niceTa.d.ts.map +1 -0
- package/dist/providers/direct/niceTa.js +30 -0
- package/dist/providers/direct/niceTa.js.map +1 -0
- package/dist/providers/direct/oecd.d.ts +3 -0
- package/dist/providers/direct/oecd.d.ts.map +1 -0
- package/dist/providers/direct/oecd.js +102 -0
- package/dist/providers/direct/oecd.js.map +1 -0
- package/dist/providers/direct/orangeBook.d.ts +3 -0
- package/dist/providers/direct/orangeBook.d.ts.map +1 -0
- package/dist/providers/direct/orangeBook.js +48 -0
- package/dist/providers/direct/orangeBook.js.map +1 -0
- package/dist/providers/direct/paho.d.ts +3 -0
- package/dist/providers/direct/paho.d.ts.map +1 -0
- package/dist/providers/direct/paho.js +30 -0
- package/dist/providers/direct/paho.js.map +1 -0
- package/dist/providers/direct/pbacPsd.d.ts +3 -0
- package/dist/providers/direct/pbacPsd.d.ts.map +1 -0
- package/dist/providers/direct/pbacPsd.js +30 -0
- package/dist/providers/direct/pbacPsd.js.map +1 -0
- package/dist/providers/direct/pbsSchedule.d.ts +3 -0
- package/dist/providers/direct/pbsSchedule.d.ts.map +1 -0
- package/dist/providers/direct/pbsSchedule.js +37 -0
- package/dist/providers/direct/pbsSchedule.js.map +1 -0
- package/dist/providers/direct/pharmapendium.d.ts +3 -0
- package/dist/providers/direct/pharmapendium.d.ts.map +1 -0
- package/dist/providers/direct/pharmapendium.js +39 -0
- package/dist/providers/direct/pharmapendium.js.map +1 -0
- package/dist/providers/direct/proxyClient.d.ts +15 -0
- package/dist/providers/direct/proxyClient.d.ts.map +1 -0
- package/dist/providers/direct/proxyClient.js +76 -0
- package/dist/providers/direct/proxyClient.js.map +1 -0
- package/dist/providers/direct/pssru.d.ts +3 -0
- package/dist/providers/direct/pssru.d.ts.map +1 -0
- package/dist/providers/direct/pssru.js +33 -0
- package/dist/providers/direct/pssru.js.map +1 -0
- package/dist/providers/direct/pubmed.d.ts +3 -0
- package/dist/providers/direct/pubmed.d.ts.map +1 -0
- package/dist/providers/direct/pubmed.js +73 -0
- package/dist/providers/direct/pubmed.js.map +1 -0
- package/dist/providers/direct/purpleBook.d.ts +3 -0
- package/dist/providers/direct/purpleBook.d.ts.map +1 -0
- package/dist/providers/direct/purpleBook.js +52 -0
- package/dist/providers/direct/purpleBook.js.map +1 -0
- package/dist/providers/direct/tlv.d.ts +3 -0
- package/dist/providers/direct/tlv.d.ts.map +1 -0
- package/dist/providers/direct/tlv.js +30 -0
- package/dist/providers/direct/tlv.js.map +1 -0
- package/dist/providers/direct/whoGho.d.ts +3 -0
- package/dist/providers/direct/whoGho.d.ts.map +1 -0
- package/dist/providers/direct/whoGho.js +51 -0
- package/dist/providers/direct/whoGho.js.map +1 -0
- package/dist/providers/direct/worldBank.d.ts +3 -0
- package/dist/providers/direct/worldBank.d.ts.map +1 -0
- package/dist/providers/direct/worldBank.js +54 -0
- package/dist/providers/direct/worldBank.js.map +1 -0
- package/dist/providers/factory.d.ts +3 -0
- package/dist/providers/factory.d.ts.map +1 -0
- package/dist/providers/factory.js +8 -0
- package/dist/providers/factory.js.map +1 -0
- package/dist/providers/hosted/index.d.ts +9 -0
- package/dist/providers/hosted/index.d.ts.map +1 -0
- package/dist/providers/hosted/index.js +16 -0
- package/dist/providers/hosted/index.js.map +1 -0
- package/dist/providers/types.d.ts +176 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +2 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +80 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/costEffectivenessModel.d.ts +98 -0
- package/dist/tools/costEffectivenessModel.d.ts.map +1 -0
- package/dist/tools/costEffectivenessModel.js +404 -0
- package/dist/tools/costEffectivenessModel.js.map +1 -0
- package/dist/tools/htaDossierPrep.d.ts +69 -0
- package/dist/tools/htaDossierPrep.d.ts.map +1 -0
- package/dist/tools/htaDossierPrep.js +399 -0
- package/dist/tools/htaDossierPrep.js.map +1 -0
- package/dist/tools/knowledgeRead.d.ts +21 -0
- package/dist/tools/knowledgeRead.d.ts.map +1 -0
- package/dist/tools/knowledgeRead.js +38 -0
- package/dist/tools/knowledgeRead.js.map +1 -0
- package/dist/tools/knowledgeSearch.d.ts +37 -0
- package/dist/tools/knowledgeSearch.d.ts.map +1 -0
- package/dist/tools/knowledgeSearch.js +51 -0
- package/dist/tools/knowledgeSearch.js.map +1 -0
- package/dist/tools/knowledgeWrite.d.ts +25 -0
- package/dist/tools/knowledgeWrite.d.ts.map +1 -0
- package/dist/tools/knowledgeWrite.js +40 -0
- package/dist/tools/knowledgeWrite.js.map +1 -0
- package/dist/tools/literatureSearch.d.ts +42 -0
- package/dist/tools/literatureSearch.d.ts.map +1 -0
- package/dist/tools/literatureSearch.js +142 -0
- package/dist/tools/literatureSearch.js.map +1 -0
- package/dist/tools/metabolicProfile.d.ts +19 -0
- package/dist/tools/metabolicProfile.d.ts.map +1 -0
- package/dist/tools/metabolicProfile.js +150 -0
- package/dist/tools/metabolicProfile.js.map +1 -0
- package/dist/tools/projectCreate.d.ts +37 -0
- package/dist/tools/projectCreate.d.ts.map +1 -0
- package/dist/tools/projectCreate.js +61 -0
- package/dist/tools/projectCreate.js.map +1 -0
- package/package.json +71 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { LiteratureResult } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Validate that a proxy URL is safe to use (localhost only).
|
|
4
|
+
* Returns validated URL or null if invalid.
|
|
5
|
+
* Logs a warning to stderr if an invalid URL was provided.
|
|
6
|
+
*/
|
|
7
|
+
export declare function validateProxyUrl(rawUrl: string | undefined): string | null;
|
|
8
|
+
export declare function getProxyUrl(): string | null;
|
|
9
|
+
/**
|
|
10
|
+
* Fetch literature results through the local proxy.
|
|
11
|
+
* Expected proxy endpoint: {PROXY_URL}/{source}?query=X&max=N
|
|
12
|
+
* Expected proxy response: { results: LiteratureResult[] } OR LiteratureResult[]
|
|
13
|
+
*/
|
|
14
|
+
export declare function fetchViaProxy(source: string, query: string, maxResults: number): Promise<LiteratureResult[]>;
|
|
15
|
+
//# sourceMappingURL=proxyClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxyClient.d.ts","sourceRoot":"","sources":["../../../src/providers/direct/proxyClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAmC1E;AAED,wBAAgB,WAAW,IAAI,MAAM,GAAG,IAAI,CAE3C;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAiC7B"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validate that a proxy URL is safe to use (localhost only).
|
|
3
|
+
* Returns validated URL or null if invalid.
|
|
4
|
+
* Logs a warning to stderr if an invalid URL was provided.
|
|
5
|
+
*/
|
|
6
|
+
export function validateProxyUrl(rawUrl) {
|
|
7
|
+
if (!rawUrl)
|
|
8
|
+
return null;
|
|
9
|
+
let parsed;
|
|
10
|
+
try {
|
|
11
|
+
parsed = new URL(rawUrl);
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
console.error(`[HEOR] Invalid HEOR_PROXY_URL (not a valid URL): ${rawUrl}. Proxy disabled.`);
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
// Must be http (localhost doesn't need https)
|
|
18
|
+
if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
|
|
19
|
+
console.error(`[HEOR] HEOR_PROXY_URL must use http:// or https://, got ${parsed.protocol}. Proxy disabled.`);
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
// MUST be localhost — reject anything else to prevent query exfiltration
|
|
23
|
+
const hostname = parsed.hostname.toLowerCase();
|
|
24
|
+
const allowedHosts = ["localhost", "127.0.0.1", "::1", "[::1]"];
|
|
25
|
+
if (!allowedHosts.includes(hostname)) {
|
|
26
|
+
console.error(`[HEOR] SECURITY: HEOR_PROXY_URL must be localhost/127.0.0.1 only. ` +
|
|
27
|
+
`Got: ${hostname}. Proxy disabled to prevent query exfiltration. ` +
|
|
28
|
+
`If you need a remote proxy, wrap it with an SSH tunnel to localhost.`);
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
// Strip trailing slash for consistent URL building
|
|
32
|
+
return rawUrl.replace(/\/+$/, "");
|
|
33
|
+
}
|
|
34
|
+
export function getProxyUrl() {
|
|
35
|
+
return validateProxyUrl(process.env.HEOR_PROXY_URL);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Fetch literature results through the local proxy.
|
|
39
|
+
* Expected proxy endpoint: {PROXY_URL}/{source}?query=X&max=N
|
|
40
|
+
* Expected proxy response: { results: LiteratureResult[] } OR LiteratureResult[]
|
|
41
|
+
*/
|
|
42
|
+
export async function fetchViaProxy(source, query, maxResults) {
|
|
43
|
+
const proxyUrl = getProxyUrl();
|
|
44
|
+
if (!proxyUrl)
|
|
45
|
+
return [];
|
|
46
|
+
try {
|
|
47
|
+
const url = `${proxyUrl}/${source}?query=${encodeURIComponent(query)}&max=${maxResults}`;
|
|
48
|
+
const res = await fetch(url, {
|
|
49
|
+
headers: { Accept: "application/json" },
|
|
50
|
+
// Short timeout — local proxy should be fast
|
|
51
|
+
signal: AbortSignal.timeout(30000),
|
|
52
|
+
});
|
|
53
|
+
if (!res.ok)
|
|
54
|
+
return [];
|
|
55
|
+
const data = (await res.json());
|
|
56
|
+
// Accept both formats: { results: [...] } or [...]
|
|
57
|
+
const results = Array.isArray(data)
|
|
58
|
+
? data
|
|
59
|
+
: data.results;
|
|
60
|
+
if (!Array.isArray(results))
|
|
61
|
+
return [];
|
|
62
|
+
// Basic validation of each result
|
|
63
|
+
return results.filter((r) => {
|
|
64
|
+
if (typeof r !== "object" || r === null)
|
|
65
|
+
return false;
|
|
66
|
+
const obj = r;
|
|
67
|
+
return (typeof obj.id === "string" &&
|
|
68
|
+
typeof obj.title === "string" &&
|
|
69
|
+
typeof obj.source === "string");
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return [];
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=proxyClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxyClient.js","sourceRoot":"","sources":["../../../src/providers/direct/proxyClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pssru.d.ts","sourceRoot":"","sources":["../../../src/providers/direct/pssru.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGpD,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAgC/F"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// PSSRU Unit Costs: annual publication, no API. Return structured reference links.
|
|
2
|
+
export async function fetchPssru(query, maxResults) {
|
|
3
|
+
const currentYear = new Date().getFullYear();
|
|
4
|
+
const latestVolume = currentYear - 1; // published retrospectively
|
|
5
|
+
const entries = [
|
|
6
|
+
{
|
|
7
|
+
title: `PSSRU Unit Costs of Health & Social Care ${latestVolume} — ${query}`,
|
|
8
|
+
abstract: `The definitive UK reference for HEOR cost inputs. Covers: staff costs (consultant, GP, nurse, allied health), hospital services (inpatient/day-case/outpatient per diem), community and primary care, mental health, social care, hotel costs, and capital costs. For query "${query}", consult the latest volume (typically released November). Used by NICE for cost-per-QALY models. Hourly rates, per-contact costs, and per-episode costs are provided with uncertainty ranges.`,
|
|
9
|
+
url: "https://www.pssru.ac.uk/unitcostsreport/",
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
title: `PSSRU Historic Unit Costs Archive — ${query}`,
|
|
13
|
+
abstract: `Historic PSSRU volumes (2001-present). Useful for retrospective cost-effectiveness analyses, model validation, and cost inflation calculations. Published annually by University of Kent.`,
|
|
14
|
+
url: "https://www.pssru.ac.uk/research-archive/",
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
title: `NICE Reference Case Cost Inputs — use PSSRU + NHS National Cost Collection`,
|
|
18
|
+
abstract: `For a NICE STA/MTA submission, unit costs should be sourced from: (1) PSSRU Unit Costs for staff/care time, (2) NHS National Cost Collection (formerly Reference Costs) for healthcare resource groups (HRGs), (3) BNF for drug costs. All inflated to current price year using HCHS pay & prices index.`,
|
|
19
|
+
url: "https://www.nice.org.uk/process/pmg36/chapter/economic-evaluation",
|
|
20
|
+
},
|
|
21
|
+
];
|
|
22
|
+
return entries.slice(0, maxResults).map((e, i) => ({
|
|
23
|
+
id: `pssru_${i}`,
|
|
24
|
+
source: "pssru",
|
|
25
|
+
title: e.title,
|
|
26
|
+
authors: ["Personal Social Services Research Unit (PSSRU), University of Kent"],
|
|
27
|
+
date: String(latestVolume),
|
|
28
|
+
study_type: "cost_reference",
|
|
29
|
+
abstract: e.abstract,
|
|
30
|
+
url: e.url,
|
|
31
|
+
}));
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=pssru.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pssru.js","sourceRoot":"","sources":["../../../src/providers/direct/pssru.ts"],"names":[],"mappings":"AAEA,mFAAmF;AACnF,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,KAAa,EAAE,UAAkB;IAChE,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC7C,MAAM,YAAY,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC,4BAA4B;IAElE,MAAM,OAAO,GAAG;QACd;YACE,KAAK,EAAE,4CAA4C,YAAY,MAAM,KAAK,EAAE;YAC5E,QAAQ,EAAE,gRAAgR,KAAK,iMAAiM;YAChe,GAAG,EAAE,0CAA0C;SAChD;QACD;YACE,KAAK,EAAE,uCAAuC,KAAK,EAAE;YACrD,QAAQ,EAAE,2LAA2L;YACrM,GAAG,EAAE,2CAA2C;SACjD;QACD;YACE,KAAK,EAAE,4EAA4E;YACnF,QAAQ,EAAE,0SAA0S;YACpT,GAAG,EAAE,mEAAmE;SACzE;KACF,CAAC;IAEF,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACjD,EAAE,EAAE,SAAS,CAAC,EAAE;QAChB,MAAM,EAAE,OAAgB;QACxB,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,OAAO,EAAE,CAAC,oEAAoE,CAAC;QAC/E,IAAI,EAAE,MAAM,CAAC,YAAY,CAAC;QAC1B,UAAU,EAAE,gBAAgB;QAC5B,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,GAAG,EAAE,CAAC,CAAC,GAAG;KACX,CAAC,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pubmed.d.ts","sourceRoot":"","sources":["../../../src/providers/direct/pubmed.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AA6BpD,wBAAsB,WAAW,CAC/B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAsD7B"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
const BASE = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils";
|
|
2
|
+
function parseAbstractsFromXml(xml) {
|
|
3
|
+
const abstracts = new Map();
|
|
4
|
+
// Split by <PubmedArticle> to process each article
|
|
5
|
+
const articles = xml.split(/<PubmedArticle>/);
|
|
6
|
+
for (const article of articles) {
|
|
7
|
+
const pmidMatch = article.match(/<PMID[^>]*>(\d+)<\/PMID>/);
|
|
8
|
+
if (!pmidMatch)
|
|
9
|
+
continue;
|
|
10
|
+
const pmid = pmidMatch[1];
|
|
11
|
+
// Get all AbstractText elements and concatenate them
|
|
12
|
+
const abstractParts = [];
|
|
13
|
+
const regex = /<AbstractText[^>]*>([\s\S]*?)<\/AbstractText>/g;
|
|
14
|
+
let match;
|
|
15
|
+
while ((match = regex.exec(article)) !== null) {
|
|
16
|
+
// Strip any nested XML tags
|
|
17
|
+
const text = match[1].replace(/<[^>]+>/g, "").trim();
|
|
18
|
+
if (text)
|
|
19
|
+
abstractParts.push(text);
|
|
20
|
+
}
|
|
21
|
+
if (abstractParts.length > 0) {
|
|
22
|
+
abstracts.set(pmid, abstractParts.join(" "));
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return abstracts;
|
|
26
|
+
}
|
|
27
|
+
export async function fetchPubMed(query, maxResults) {
|
|
28
|
+
try {
|
|
29
|
+
const searchUrl = `${BASE}/esearch.fcgi?db=pubmed&term=${encodeURIComponent(query)}&retmax=${maxResults}&retmode=json`;
|
|
30
|
+
const searchRes = await fetch(searchUrl);
|
|
31
|
+
if (!searchRes.ok)
|
|
32
|
+
return [];
|
|
33
|
+
const searchData = (await searchRes.json());
|
|
34
|
+
const ids = searchData.esearchresult.idlist;
|
|
35
|
+
if (ids.length === 0)
|
|
36
|
+
return [];
|
|
37
|
+
const summaryUrl = `${BASE}/esummary.fcgi?db=pubmed&id=${ids.join(",")}&retmode=json`;
|
|
38
|
+
const summaryRes = await fetch(summaryUrl);
|
|
39
|
+
if (!summaryRes.ok)
|
|
40
|
+
return [];
|
|
41
|
+
const summaryData = (await summaryRes.json());
|
|
42
|
+
// Fetch abstracts via efetch; if it fails, proceed with empty abstracts
|
|
43
|
+
let abstracts = new Map();
|
|
44
|
+
try {
|
|
45
|
+
const efetchUrl = `${BASE}/efetch.fcgi?db=pubmed&id=${ids.join(",")}&rettype=abstract&retmode=xml`;
|
|
46
|
+
const efetchRes = await fetch(efetchUrl);
|
|
47
|
+
if (efetchRes.ok) {
|
|
48
|
+
const efetchXml = await efetchRes.text();
|
|
49
|
+
abstracts = parseAbstractsFromXml(efetchXml);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
// proceed with empty abstracts
|
|
54
|
+
}
|
|
55
|
+
return summaryData.result.uids.map((uid) => {
|
|
56
|
+
const doc = summaryData.result[uid];
|
|
57
|
+
return {
|
|
58
|
+
id: `pubmed_${uid}`,
|
|
59
|
+
source: "pubmed",
|
|
60
|
+
title: doc.title ?? "",
|
|
61
|
+
authors: (doc.authors ?? []).map((a) => a.name),
|
|
62
|
+
date: doc.pubdate ?? "",
|
|
63
|
+
study_type: "unknown",
|
|
64
|
+
abstract: abstracts.get(uid) ?? "",
|
|
65
|
+
url: `https://pubmed.ncbi.nlm.nih.gov/${uid}/`,
|
|
66
|
+
};
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return [];
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=pubmed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pubmed.js","sourceRoot":"","sources":["../../../src/providers/direct/pubmed.ts"],"names":[],"mappings":"AAEA,MAAM,IAAI,GAAG,+CAA+C,CAAC;AAE7D,SAAS,qBAAqB,CAAC,GAAW;IACxC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC5C,mDAAmD;IACnD,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAC9C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC5D,IAAI,CAAC,SAAS;YAAE,SAAS;QACzB,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAE1B,qDAAqD;QACrD,MAAM,aAAa,GAAa,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,gDAAgD,CAAC;QAC/D,IAAI,KAAK,CAAC;QACV,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC9C,4BAA4B;YAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACrD,IAAI,IAAI;gBAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,KAAa,EACb,UAAkB;IAElB,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,GAAG,IAAI,gCAAgC,kBAAkB,CAAC,KAAK,CAAC,WAAW,UAAU,eAAe,CAAC;QACvH,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,SAAS,CAAC,EAAE;YAAE,OAAO,EAAE,CAAC;QAE7B,MAAM,UAAU,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,CAEzC,CAAC;QACF,MAAM,GAAG,GAAG,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC;QAC5C,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAEhC,MAAM,UAAU,GAAG,GAAG,IAAI,+BAA+B,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC;QACtF,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,CAAC,UAAU,CAAC,EAAE;YAAE,OAAO,EAAE,CAAC;QAE9B,MAAM,WAAW,GAAG,CAAC,MAAM,UAAU,CAAC,IAAI,EAAE,CAE3C,CAAC;QAEF,wEAAwE;QACxE,IAAI,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC1C,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,GAAG,IAAI,6BAA6B,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,+BAA+B,CAAC;YACnG,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC;YACzC,IAAI,SAAS,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;gBACzC,SAAS,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,+BAA+B;QACjC,CAAC;QAED,OAAO,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YACzC,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,CAKjC,CAAC;YACF,OAAO;gBACL,EAAE,EAAE,UAAU,GAAG,EAAE;gBACnB,MAAM,EAAE,QAAiB;gBACzB,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE;gBACtB,OAAO,EAAE,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC/C,IAAI,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE;gBACvB,UAAU,EAAE,SAAS;gBACrB,QAAQ,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE;gBAClC,GAAG,EAAE,mCAAmC,GAAG,GAAG;aAC/C,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"purpleBook.d.ts","sourceRoot":"","sources":["../../../src/providers/direct/purpleBook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAuBpD,wBAAsB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAmCpG"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// openFDA drug label endpoint with biologics filter
|
|
2
|
+
const BASE = "https://api.fda.gov/drug/label.json";
|
|
3
|
+
export async function fetchPurpleBook(query, maxResults) {
|
|
4
|
+
try {
|
|
5
|
+
// Filter for biologics (BLA applications)
|
|
6
|
+
const searchQuery = `(openfda.application_number:BLA*+AND+(openfda.brand_name:"${query}"+openfda.generic_name:"${query}"))`;
|
|
7
|
+
const url = `${BASE}?search=${encodeURIComponent(searchQuery)}&limit=${Math.min(maxResults, 100)}`;
|
|
8
|
+
const res = await fetch(url);
|
|
9
|
+
if (!res.ok)
|
|
10
|
+
return getPurpleBookFallback(query, maxResults);
|
|
11
|
+
const data = (await res.json());
|
|
12
|
+
if (!data.results || data.results.length === 0)
|
|
13
|
+
return getPurpleBookFallback(query, maxResults);
|
|
14
|
+
return data.results.slice(0, maxResults).map((r, i) => {
|
|
15
|
+
const brand = r.openfda?.brand_name?.[0] ?? "Unknown";
|
|
16
|
+
const generic = r.openfda?.generic_name?.[0] ?? "";
|
|
17
|
+
const manuf = r.openfda?.manufacturer_name?.[0] ?? "Unknown";
|
|
18
|
+
const appNum = r.openfda?.application_number?.[0] ?? "N/A";
|
|
19
|
+
return {
|
|
20
|
+
id: `purple_book_${r.id ?? i}`,
|
|
21
|
+
source: "purple_book",
|
|
22
|
+
title: `${brand} (${generic}) — ${appNum}`,
|
|
23
|
+
authors: [manuf],
|
|
24
|
+
date: r.effective_time ?? "",
|
|
25
|
+
study_type: "regulatory",
|
|
26
|
+
abstract: [
|
|
27
|
+
`BLA Application: ${appNum}`,
|
|
28
|
+
`Manufacturer: ${manuf}`,
|
|
29
|
+
`Brand: ${brand} | Generic: ${generic}`,
|
|
30
|
+
r.indications_and_usage?.[0] ? `Indications: ${r.indications_and_usage[0].slice(0, 300)}` : null,
|
|
31
|
+
].filter(Boolean).join(" | "),
|
|
32
|
+
url: `https://purplebooksearch.fda.gov/search?query=${encodeURIComponent(brand)}`,
|
|
33
|
+
};
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return getPurpleBookFallback(query, maxResults);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function getPurpleBookFallback(query, maxResults) {
|
|
41
|
+
return [{
|
|
42
|
+
id: "purple_book_search",
|
|
43
|
+
source: "purple_book",
|
|
44
|
+
title: `FDA Purple Book Search: ${query}`,
|
|
45
|
+
authors: ["U.S. Food and Drug Administration"],
|
|
46
|
+
date: new Date().getFullYear().toString(),
|
|
47
|
+
study_type: "registry",
|
|
48
|
+
abstract: `Search the FDA Purple Book for licensed biological products including biosimilars and reference products for "${query}". Covers FDA-licensed allergenic, cellular, gene therapy, hematologic, and vaccine products.`,
|
|
49
|
+
url: `https://purplebooksearch.fda.gov/search?query=${encodeURIComponent(query)}`,
|
|
50
|
+
}].slice(0, maxResults);
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=purpleBook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"purpleBook.js","sourceRoot":"","sources":["../../../src/providers/direct/purpleBook.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tlv.d.ts","sourceRoot":"","sources":["../../../src/providers/direct/tlv.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,wBAAsB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CA6B7F"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export async function fetchTlv(query, maxResults) {
|
|
2
|
+
const entries = [
|
|
3
|
+
{
|
|
4
|
+
title: `TLV Sweden Decisions: ${query}`,
|
|
5
|
+
abstract: `TLV (Tandvårds- och läkemedelsförmånsverket — Dental and Pharmaceutical Benefits Agency) makes reimbursement decisions for drugs in Sweden's pharmaceutical benefits scheme (LFN). Each decision includes clinical assessment, health economic evaluation, and reimbursement conditions. Search "${query}" to find TLV decisions relevant to the drug or indication. Key for Swedish market access and Nordic HTA benchmarking.`,
|
|
6
|
+
url: `https://www.tlv.se/in-english/search.html?query=${encodeURIComponent(query)}`,
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
title: `TLV General Guidelines for Economic Evaluations`,
|
|
10
|
+
abstract: `TLV's guidelines for health economic evaluations submitted in support of reimbursement applications. Covers cost-effectiveness analysis, willingness-to-pay threshold (approximately SEK 500K/QALY for severe conditions), QALY methodology, perspective (societal), discount rate (3%), and uncertainty analysis requirements. Required reading for Swedish HTA submissions.`,
|
|
11
|
+
url: "https://www.tlv.se/in-english/medicines/general-guidelines-for-economic-evaluations.html",
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
title: `TLV Value-Based Pricing Framework`,
|
|
15
|
+
abstract: `Sweden operates a value-based pricing system administered by TLV. Drug prices are set based on demonstrated cost-effectiveness relative to severity of disease. TLV applies an ethical platform considering severity, need, and equity alongside economic evidence. Overview of the Swedish pharmaceutical reimbursement framework and value assessment principles.`,
|
|
16
|
+
url: "https://www.tlv.se/in-english/about-us.html",
|
|
17
|
+
},
|
|
18
|
+
];
|
|
19
|
+
return entries.slice(0, maxResults).map((e, i) => ({
|
|
20
|
+
id: `tlv_${i}`,
|
|
21
|
+
source: "tlv",
|
|
22
|
+
title: e.title,
|
|
23
|
+
authors: ["Tandvårds- och läkemedelsförmånsverket (TLV) — Dental and Pharmaceutical Benefits Agency, Sweden"],
|
|
24
|
+
date: new Date().getFullYear().toString(),
|
|
25
|
+
study_type: "hta_report",
|
|
26
|
+
abstract: e.abstract,
|
|
27
|
+
url: e.url,
|
|
28
|
+
}));
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=tlv.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tlv.js","sourceRoot":"","sources":["../../../src/providers/direct/tlv.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,KAAa,EAAE,UAAkB;IAC9D,MAAM,OAAO,GAAG;QACd;YACE,KAAK,EAAE,yBAAyB,KAAK,EAAE;YACvC,QAAQ,EAAE,oSAAoS,KAAK,wHAAwH;YAC3a,GAAG,EAAE,mDAAmD,kBAAkB,CAAC,KAAK,CAAC,EAAE;SACpF;QACD;YACE,KAAK,EAAE,iDAAiD;YACxD,QAAQ,EAAE,+WAA+W;YACzX,GAAG,EAAE,0FAA0F;SAChG;QACD;YACE,KAAK,EAAE,mCAAmC;YAC1C,QAAQ,EAAE,qWAAqW;YAC/W,GAAG,EAAE,6CAA6C;SACnD;KACF,CAAC;IAEF,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACjD,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,MAAM,EAAE,KAAc;QACtB,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,OAAO,EAAE,CAAC,kGAAkG,CAAC;QAC7G,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;QACzC,UAAU,EAAE,YAAY;QACxB,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,GAAG,EAAE,CAAC,CAAC,GAAG;KACX,CAAC,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whoGho.d.ts","sourceRoot":"","sources":["../../../src/providers/direct/whoGho.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAsCpD,wBAAsB,WAAW,CAC/B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CA4B7B"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
const BASE = "https://ghoapi.who.int/api";
|
|
2
|
+
// Map common HEOR search terms to GHO indicator codes
|
|
3
|
+
const INDICATOR_MAP = {
|
|
4
|
+
mortality: "WHOSIS_000001", // Life expectancy at birth
|
|
5
|
+
"life expectancy": "WHOSIS_000001",
|
|
6
|
+
diabetes: "NCD_BMI_30A", // Prevalence of obesity (BMI≥30)
|
|
7
|
+
obesity: "NCD_BMI_30A",
|
|
8
|
+
cardiovascular: "NCDMORT3070", // NCD mortality 30-70
|
|
9
|
+
cancer: "NCDMORT3070",
|
|
10
|
+
tobacco: "M_Est_smk_curr_std", // Tobacco use prevalence
|
|
11
|
+
alcohol: "SA_0000001688", // Alcohol consumption per capita
|
|
12
|
+
"health expenditure": "GHED_CHE_pc_PPP_SHA2011", // Health expenditure per capita
|
|
13
|
+
};
|
|
14
|
+
function findIndicator(query) {
|
|
15
|
+
const q = query.toLowerCase();
|
|
16
|
+
for (const [keyword, code] of Object.entries(INDICATOR_MAP)) {
|
|
17
|
+
if (q.includes(keyword))
|
|
18
|
+
return code;
|
|
19
|
+
}
|
|
20
|
+
return "WHOSIS_000001"; // Default: life expectancy
|
|
21
|
+
}
|
|
22
|
+
export async function fetchWhoGho(query, maxResults) {
|
|
23
|
+
try {
|
|
24
|
+
const indicator = findIndicator(query);
|
|
25
|
+
const url = `${BASE}/${indicator}?$filter=TimeDim ge '2018'&$top=${maxResults}&$orderby=TimeDim desc`;
|
|
26
|
+
const res = await fetch(url, {
|
|
27
|
+
headers: { Accept: "application/json" },
|
|
28
|
+
});
|
|
29
|
+
if (!res.ok)
|
|
30
|
+
return [];
|
|
31
|
+
const data = (await res.json());
|
|
32
|
+
const values = data.value ?? [];
|
|
33
|
+
return values
|
|
34
|
+
.filter((v) => v.NumericValue !== null)
|
|
35
|
+
.slice(0, maxResults)
|
|
36
|
+
.map((v, i) => ({
|
|
37
|
+
id: `who_gho_${indicator}_${v.SpatialDim}_${v.TimeDim}_${i}`,
|
|
38
|
+
source: "who_gho",
|
|
39
|
+
title: `${indicator}: ${v.SpatialDim} (${v.TimeDim})`,
|
|
40
|
+
authors: ["World Health Organization"],
|
|
41
|
+
date: v.TimeDim ?? "",
|
|
42
|
+
study_type: "registry",
|
|
43
|
+
abstract: `Value: ${v.NumericValue}${v.Dim1 ? ` | Dimension: ${v.Dim1}` : ""} | Country: ${v.SpatialDim} | Year: ${v.TimeDim}`,
|
|
44
|
+
url: `https://www.who.int/data/gho/data/indicators/indicator-details/GHO/${indicator}`,
|
|
45
|
+
}));
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return [];
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=whoGho.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whoGho.js","sourceRoot":"","sources":["../../../src/providers/direct/whoGho.ts"],"names":[],"mappings":"AAEA,MAAM,IAAI,GAAG,4BAA4B,CAAC;AAe1C,sDAAsD;AACtD,MAAM,aAAa,GAA2B;IAC5C,SAAS,EAAE,eAAe,EAAE,2BAA2B;IACvD,iBAAiB,EAAE,eAAe;IAClC,QAAQ,EAAE,aAAa,EAAE,iCAAiC;IAC1D,OAAO,EAAE,aAAa;IACtB,cAAc,EAAE,aAAa,EAAE,sBAAsB;IACrD,MAAM,EAAE,aAAa;IACrB,OAAO,EAAE,oBAAoB,EAAE,yBAAyB;IACxD,OAAO,EAAE,eAAe,EAAE,iCAAiC;IAC3D,oBAAoB,EAAE,yBAAyB,EAAE,gCAAgC;CAClF,CAAC;AAEF,SAAS,aAAa,CAAC,KAAa;IAClC,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;QAC5D,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC;IACvC,CAAC;IACD,OAAO,eAAe,CAAC,CAAC,2BAA2B;AACrD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,KAAa,EACb,UAAkB;IAElB,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,GAAG,GAAG,GAAG,IAAI,IAAI,SAAS,mCAAmC,UAAU,wBAAwB,CAAC;QACtG,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE;SACxC,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,EAAE,CAAC;QAEvB,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAgB,CAAC;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAEhC,OAAO,MAAM;aACV,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,IAAI,CAAC;aACtC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC;aACpB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YACd,EAAE,EAAE,WAAW,SAAS,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,EAAE;YAC5D,MAAM,EAAE,SAAkB;YAC1B,KAAK,EAAE,GAAG,SAAS,KAAK,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,OAAO,GAAG;YACrD,OAAO,EAAE,CAAC,2BAA2B,CAAC;YACtC,IAAI,EAAE,CAAC,CAAC,OAAO,IAAI,EAAE;YACrB,UAAU,EAAE,UAAU;YACtB,QAAQ,EAAE,UAAU,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,UAAU,YAAY,CAAC,CAAC,OAAO,EAAE;YAC9H,GAAG,EAAE,sEAAsE,SAAS,EAAE;SACvF,CAAC,CAAC,CAAC;IACR,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worldBank.d.ts","sourceRoot":"","sources":["../../../src/providers/direct/worldBank.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AA+BpD,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CA8B7B"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
const BASE = "https://api.worldbank.org/v2";
|
|
2
|
+
// Map HEOR-relevant terms to World Bank indicator codes
|
|
3
|
+
const INDICATOR_MAP = {
|
|
4
|
+
gdp: "NY.GDP.PCAP.PP.CD", // GDP per capita PPP
|
|
5
|
+
population: "SP.POP.TOTL", // Total population
|
|
6
|
+
"life expectancy": "SP.DYN.LE00.IN", // Life expectancy at birth
|
|
7
|
+
"health expenditure": "SH.XPD.CHEX.PP.CD", // Health expenditure per capita PPP
|
|
8
|
+
mortality: "SP.DYN.CDRT.IN", // Crude death rate
|
|
9
|
+
"birth rate": "SP.DYN.CBRT.IN",
|
|
10
|
+
elderly: "SP.POP.65UP.TO.ZS", // Population 65+
|
|
11
|
+
"infant mortality": "SP.DYN.IMRT.IN",
|
|
12
|
+
};
|
|
13
|
+
function findIndicator(query) {
|
|
14
|
+
const q = query.toLowerCase();
|
|
15
|
+
for (const [keyword, code] of Object.entries(INDICATOR_MAP)) {
|
|
16
|
+
if (q.includes(keyword))
|
|
17
|
+
return code;
|
|
18
|
+
}
|
|
19
|
+
return "NY.GDP.PCAP.PP.CD"; // Default: GDP per capita PPP
|
|
20
|
+
}
|
|
21
|
+
export async function fetchWorldBank(query, maxResults) {
|
|
22
|
+
try {
|
|
23
|
+
const indicator = findIndicator(query);
|
|
24
|
+
// Get most recent data for all countries
|
|
25
|
+
const url = `${BASE}/country/all/indicator/${indicator}?format=json&date=2018:2025&per_page=${maxResults}&mrnev=1`;
|
|
26
|
+
const res = await fetch(url);
|
|
27
|
+
if (!res.ok)
|
|
28
|
+
return [];
|
|
29
|
+
const json = await res.json();
|
|
30
|
+
// World Bank returns [metadata, data] array
|
|
31
|
+
if (!Array.isArray(json) || json.length < 2)
|
|
32
|
+
return [];
|
|
33
|
+
const data = json[1];
|
|
34
|
+
if (!data)
|
|
35
|
+
return [];
|
|
36
|
+
return data
|
|
37
|
+
.filter((v) => v.value !== null)
|
|
38
|
+
.slice(0, maxResults)
|
|
39
|
+
.map((v, i) => ({
|
|
40
|
+
id: `world_bank_${indicator}_${v.country.id}_${v.date}_${i}`,
|
|
41
|
+
source: "world_bank",
|
|
42
|
+
title: `${v.indicator.value}: ${v.country.value} (${v.date})`,
|
|
43
|
+
authors: ["World Bank"],
|
|
44
|
+
date: v.date ?? "",
|
|
45
|
+
study_type: "registry",
|
|
46
|
+
abstract: `${v.indicator.value}: ${v.value} | Country: ${v.country.value} (${v.country.id}) | Year: ${v.date}`,
|
|
47
|
+
url: `https://data.worldbank.org/indicator/${indicator}`,
|
|
48
|
+
}));
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return [];
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=worldBank.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worldBank.js","sourceRoot":"","sources":["../../../src/providers/direct/worldBank.ts"],"names":[],"mappings":"AAEA,MAAM,IAAI,GAAG,8BAA8B,CAAC;AAS5C,wDAAwD;AACxD,MAAM,aAAa,GAA2B;IAC5C,GAAG,EAAE,mBAAmB,EAAE,qBAAqB;IAC/C,UAAU,EAAE,aAAa,EAAE,mBAAmB;IAC9C,iBAAiB,EAAE,gBAAgB,EAAE,2BAA2B;IAChE,oBAAoB,EAAE,mBAAmB,EAAE,oCAAoC;IAC/E,SAAS,EAAE,gBAAgB,EAAE,mBAAmB;IAChD,YAAY,EAAE,gBAAgB;IAC9B,OAAO,EAAE,mBAAmB,EAAE,iBAAiB;IAC/C,kBAAkB,EAAE,gBAAgB;CACrC,CAAC;AAEF,SAAS,aAAa,CAAC,KAAa;IAClC,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;QAC5D,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC;IACvC,CAAC;IACD,OAAO,mBAAmB,CAAC,CAAC,8BAA8B;AAC5D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,KAAa,EACb,UAAkB;IAElB,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QACvC,yCAAyC;QACzC,MAAM,GAAG,GAAG,GAAG,IAAI,0BAA0B,SAAS,wCAAwC,UAAU,UAAU,CAAC;QACnH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,EAAE,CAAC;QAEvB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,4CAA4C;QAC5C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,EAAE,CAAC;QACvD,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAqB,CAAC;QACzC,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QAErB,OAAO,IAAI;aACR,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC;aAC/B,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC;aACpB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YACd,EAAE,EAAE,cAAc,SAAS,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE;YAC5D,MAAM,EAAE,YAAqB;YAC7B,KAAK,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,KAAK,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,GAAG;YAC7D,OAAO,EAAE,CAAC,YAAY,CAAC;YACvB,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE;YAClB,UAAU,EAAE,UAAU;YACtB,QAAQ,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,eAAe,CAAC,CAAC,OAAO,CAAC,KAAK,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC,IAAI,EAAE;YAC9G,GAAG,EAAE,wCAAwC,SAAS,EAAE;SACzD,CAAC,CAAC,CAAC;IACR,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/providers/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAI5C,wBAAgB,cAAc,IAAI,SAAS,CAI1C"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { DirectProvider } from "./direct/index.js";
|
|
2
|
+
import { HostedProvider } from "./hosted/index.js";
|
|
3
|
+
export function createProvider() {
|
|
4
|
+
return process.env.HEOR_API_KEY
|
|
5
|
+
? new HostedProvider(process.env.HEOR_API_KEY)
|
|
6
|
+
: new DirectProvider();
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/providers/factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,UAAU,cAAc;IAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY;QAC7B,CAAC,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;QAC9C,CAAC,CAAC,IAAI,cAAc,EAAE,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { IProvider, LiteratureSearchParams, CEModelParams, DossierParams, ToolResult } from "../types.js";
|
|
2
|
+
export declare class HostedProvider implements IProvider {
|
|
3
|
+
private apiKey;
|
|
4
|
+
constructor(apiKey: string);
|
|
5
|
+
searchLiterature(_params: LiteratureSearchParams): Promise<ToolResult>;
|
|
6
|
+
buildCEModel(_params: CEModelParams): Promise<ToolResult>;
|
|
7
|
+
prepDossier(_params: DossierParams): Promise<ToolResult>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/hosted/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,sBAAsB,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE/G,qBAAa,cAAe,YAAW,SAAS;IAClC,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAE5B,gBAAgB,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,UAAU,CAAC;IAItE,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC;IAIzD,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC;CAG/D"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export class HostedProvider {
|
|
2
|
+
apiKey;
|
|
3
|
+
constructor(apiKey) {
|
|
4
|
+
this.apiKey = apiKey;
|
|
5
|
+
}
|
|
6
|
+
async searchLiterature(_params) {
|
|
7
|
+
throw new Error("HostedProvider not yet implemented — coming in Phase 2");
|
|
8
|
+
}
|
|
9
|
+
async buildCEModel(_params) {
|
|
10
|
+
throw new Error("HostedProvider not yet implemented — coming in Phase 2");
|
|
11
|
+
}
|
|
12
|
+
async prepDossier(_params) {
|
|
13
|
+
throw new Error("HostedProvider not yet implemented — coming in Phase 2");
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/hosted/index.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,cAAc;IACL;IAApB,YAAoB,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAEtC,KAAK,CAAC,gBAAgB,CAAC,OAA+B;QACpD,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAAsB;QACvC,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAsB;QACtC,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;CACF"}
|