@mcpassure/mcp-anvisa-bulario 2.1.0 → 2.1.1
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/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +23 -39
- package/dist/bootstrap.js.map +1 -1
- package/package.json +1 -1
package/dist/bootstrap.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAwCA,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAgDD,MAAM,MAAM,eAAe,GACvB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,YAAY,GAAG,YAAY,GAAG,iBAAiB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACtF;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAElC,wBAAsB,aAAa,IAAI,OAAO,CAAC,eAAe,CAAC,CAkD9D"}
|
package/dist/bootstrap.js
CHANGED
|
@@ -3,10 +3,12 @@ import { existsSync } from "node:fs";
|
|
|
3
3
|
import { mkdir, readFile, rename, unlink, writeFile } from "node:fs/promises";
|
|
4
4
|
import { homedir } from "node:os";
|
|
5
5
|
import { dirname, join } from "node:path";
|
|
6
|
-
import { AwsClient } from "aws4fetch";
|
|
7
6
|
const DATASET = "anvisa-bulario";
|
|
8
|
-
const
|
|
9
|
-
const
|
|
7
|
+
const MANIFEST_KEY = "bulario/latest/manifest.json";
|
|
8
|
+
const ARTIFACT_KEY = "bulario/latest/bulario.db";
|
|
9
|
+
// URL pública do bucket R2 (sem credenciais para o usuário final).
|
|
10
|
+
// Sobreposta por MCPASSURE_CDN_BASE em desenvolvimento/testes.
|
|
11
|
+
const CDN_BASE = process.env.MCPASSURE_CDN_BASE ?? "https://pub-046c52795b9445cd9f5cc5cb21b9d59f.r2.dev";
|
|
10
12
|
function getDataDir() {
|
|
11
13
|
return process.platform === "win32"
|
|
12
14
|
? join(process.env.APPDATA ?? homedir(), "mcpassure", DATASET)
|
|
@@ -21,22 +23,22 @@ function getLocalManifestPath() {
|
|
|
21
23
|
function log(msg) {
|
|
22
24
|
process.stderr.write(`[bootstrap] ${msg}\n`);
|
|
23
25
|
}
|
|
24
|
-
async function fetchManifest(
|
|
25
|
-
const url = `${
|
|
26
|
-
const resp = await
|
|
26
|
+
async function fetchManifest() {
|
|
27
|
+
const url = `${CDN_BASE}/${MANIFEST_KEY}`;
|
|
28
|
+
const resp = await fetch(url, { signal: AbortSignal.timeout(30_000) });
|
|
27
29
|
if (!resp.ok) {
|
|
28
30
|
throw new Error(`HTTP ${resp.status} ao buscar manifest em ${url}`);
|
|
29
31
|
}
|
|
30
32
|
return (await resp.json());
|
|
31
33
|
}
|
|
32
|
-
async function downloadAndVerify(
|
|
33
|
-
const url = `${
|
|
34
|
+
async function downloadAndVerify(manifest, targetPath) {
|
|
35
|
+
const url = `${CDN_BASE}/${ARTIFACT_KEY}`;
|
|
34
36
|
const tmp = `${targetPath}.download`;
|
|
35
37
|
await mkdir(dirname(targetPath), { recursive: true });
|
|
36
|
-
log(`Baixando ${
|
|
37
|
-
const resp = await
|
|
38
|
+
log(`Baixando ${(manifest.artifact.size_bytes / 1024 / 1024).toFixed(1)} MB...`);
|
|
39
|
+
const resp = await fetch(url, { signal: AbortSignal.timeout(120_000) });
|
|
38
40
|
if (!resp.ok) {
|
|
39
|
-
throw new Error(`HTTP ${resp.status} ao baixar
|
|
41
|
+
throw new Error(`HTTP ${resp.status} ao baixar dataset`);
|
|
40
42
|
}
|
|
41
43
|
const buf = Buffer.from(await resp.arrayBuffer());
|
|
42
44
|
if (buf.length !== manifest.artifact.size_bytes) {
|
|
@@ -44,48 +46,30 @@ async function downloadAndVerify(client, endpoint, manifest, targetPath) {
|
|
|
44
46
|
}
|
|
45
47
|
const hash = createHash("sha256").update(buf).digest("hex");
|
|
46
48
|
if (hash.toLowerCase() !== manifest.artifact.sha256.toLowerCase()) {
|
|
47
|
-
throw new Error(`Checksum SHA-256 não bate
|
|
49
|
+
throw new Error(`Checksum SHA-256 não bate.`);
|
|
48
50
|
}
|
|
49
51
|
await writeFile(tmp, buf);
|
|
50
52
|
await rename(tmp, targetPath);
|
|
51
|
-
log(
|
|
53
|
+
log("Download concluído. SHA-256 validado.");
|
|
52
54
|
}
|
|
53
55
|
export async function ensureDataset() {
|
|
54
56
|
const dbPath = getDbPath();
|
|
55
57
|
const manifestPath = getLocalManifestPath();
|
|
56
58
|
const dbExists = existsSync(dbPath);
|
|
57
|
-
const accessKey = process.env.MCPASSURE_R2_ACCESS_KEY_ID;
|
|
58
|
-
const secretKey = process.env.MCPASSURE_R2_SECRET_ACCESS_KEY;
|
|
59
|
-
const endpoint = process.env.MCPASSURE_R2_ENDPOINT;
|
|
60
|
-
if (!accessKey || !secretKey || !endpoint) {
|
|
61
|
-
if (dbExists) {
|
|
62
|
-
log("Credenciais R2 ausentes — usando cache local existente.");
|
|
63
|
-
return { ok: true, action: "skipped_offline", version: "local" };
|
|
64
|
-
}
|
|
65
|
-
return {
|
|
66
|
-
ok: false,
|
|
67
|
-
reason: "Cache local inexistente e credenciais R2 ausentes. " +
|
|
68
|
-
"Configure MCPASSURE_R2_ACCESS_KEY_ID, MCPASSURE_R2_SECRET_ACCESS_KEY e MCPASSURE_R2_ENDPOINT, " +
|
|
69
|
-
"ou execute `npm run sync` para popular o dataset local.",
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
const client = new AwsClient({
|
|
73
|
-
accessKeyId: accessKey,
|
|
74
|
-
secretAccessKey: secretKey,
|
|
75
|
-
service: "s3",
|
|
76
|
-
region: "auto",
|
|
77
|
-
});
|
|
78
59
|
let remoteManifest;
|
|
79
60
|
try {
|
|
80
|
-
remoteManifest = await fetchManifest(
|
|
61
|
+
remoteManifest = await fetchManifest();
|
|
81
62
|
}
|
|
82
63
|
catch (err) {
|
|
83
64
|
const reason = err instanceof Error ? err.message : String(err);
|
|
84
65
|
if (dbExists) {
|
|
85
|
-
log(`
|
|
66
|
+
log(`Sem acesso ao CDN (${reason}). Usando cache local.`);
|
|
86
67
|
return { ok: true, action: "skipped_offline", version: "stale" };
|
|
87
68
|
}
|
|
88
|
-
return {
|
|
69
|
+
return {
|
|
70
|
+
ok: false,
|
|
71
|
+
reason: `Dataset não encontrado localmente e CDN inacessível: ${reason}`,
|
|
72
|
+
};
|
|
89
73
|
}
|
|
90
74
|
if (dbExists && existsSync(manifestPath)) {
|
|
91
75
|
try {
|
|
@@ -93,14 +77,14 @@ export async function ensureDataset() {
|
|
|
93
77
|
if (localManifest.version === remoteManifest.version) {
|
|
94
78
|
return { ok: true, action: "up_to_date", version: localManifest.version };
|
|
95
79
|
}
|
|
96
|
-
log(`Versão local (${localManifest.version}) difere
|
|
80
|
+
log(`Versão local (${localManifest.version}) difere da remota (${remoteManifest.version}). Atualizando.`);
|
|
97
81
|
}
|
|
98
82
|
catch {
|
|
99
83
|
log("Manifest local corrompido. Re-baixando.");
|
|
100
84
|
}
|
|
101
85
|
}
|
|
102
86
|
try {
|
|
103
|
-
await downloadAndVerify(
|
|
87
|
+
await downloadAndVerify(remoteManifest, dbPath);
|
|
104
88
|
await writeFile(manifestPath, JSON.stringify(remoteManifest, null, 2));
|
|
105
89
|
return { ok: true, action: "downloaded", version: remoteManifest.version };
|
|
106
90
|
}
|
package/dist/bootstrap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED