vibora 9.0.4 → 9.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/bin/vibora.js +1 -1
- package/dist/assets/{index-s4vGtpm_.js → index-iX1eFSbf.js} +118 -118
- package/dist/index.html +1 -1
- package/package.json +1 -1
- package/server/index.js +43 -3
package/dist/index.html
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<link rel="icon" type="image/png" href="/logo.png" />
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
7
|
<title>Vibora - Harness Attention. Ship.</title>
|
|
8
|
-
<script type="module" crossorigin src="/assets/index-
|
|
8
|
+
<script type="module" crossorigin src="/assets/index-iX1eFSbf.js"></script>
|
|
9
9
|
<link rel="stylesheet" crossorigin href="/assets/index-C4UPW6KM.css">
|
|
10
10
|
</head>
|
|
11
11
|
<body>
|
package/package.json
CHANGED
package/server/index.js
CHANGED
|
@@ -173703,7 +173703,8 @@ app4.get("/read", (c) => {
|
|
|
173703
173703
|
mimeType,
|
|
173704
173704
|
size: stat.size,
|
|
173705
173705
|
lineCount: 0,
|
|
173706
|
-
truncated: false
|
|
173706
|
+
truncated: false,
|
|
173707
|
+
mtime: stat.mtime.toISOString()
|
|
173707
173708
|
});
|
|
173708
173709
|
}
|
|
173709
173710
|
const buffer = fs5.readFileSync(resolvedPath);
|
|
@@ -173713,7 +173714,8 @@ app4.get("/read", (c) => {
|
|
|
173713
173714
|
mimeType: "application/octet-stream",
|
|
173714
173715
|
size: stat.size,
|
|
173715
173716
|
lineCount: 0,
|
|
173716
|
-
truncated: false
|
|
173717
|
+
truncated: false,
|
|
173718
|
+
mtime: stat.mtime.toISOString()
|
|
173717
173719
|
});
|
|
173718
173720
|
}
|
|
173719
173721
|
const fullContent = buffer.toString("utf-8");
|
|
@@ -173728,12 +173730,50 @@ app4.get("/read", (c) => {
|
|
|
173728
173730
|
mimeType,
|
|
173729
173731
|
size: stat.size,
|
|
173730
173732
|
lineCount: totalLines,
|
|
173731
|
-
truncated
|
|
173733
|
+
truncated,
|
|
173734
|
+
mtime: stat.mtime.toISOString()
|
|
173732
173735
|
});
|
|
173733
173736
|
} catch (err) {
|
|
173734
173737
|
return c.json({ error: err instanceof Error ? err.message : "Failed to read file" }, 500);
|
|
173735
173738
|
}
|
|
173736
173739
|
});
|
|
173740
|
+
app4.get("/file-stat", (c) => {
|
|
173741
|
+
const filePath = c.req.query("path");
|
|
173742
|
+
const root = c.req.query("root");
|
|
173743
|
+
if (!filePath) {
|
|
173744
|
+
return c.json({ error: "path parameter is required" }, 400);
|
|
173745
|
+
}
|
|
173746
|
+
if (!root) {
|
|
173747
|
+
return c.json({ error: "root parameter is required" }, 400);
|
|
173748
|
+
}
|
|
173749
|
+
const resolvedRoot = path7.resolve(root);
|
|
173750
|
+
const resolvedPath = path7.resolve(resolvedRoot, filePath);
|
|
173751
|
+
if (!isPathWithinRoot(resolvedPath, resolvedRoot)) {
|
|
173752
|
+
return c.json({ error: "Access denied: path outside root" }, 403);
|
|
173753
|
+
}
|
|
173754
|
+
try {
|
|
173755
|
+
if (!fs5.existsSync(resolvedPath)) {
|
|
173756
|
+
return c.json({
|
|
173757
|
+
path: filePath,
|
|
173758
|
+
mtime: "",
|
|
173759
|
+
size: 0,
|
|
173760
|
+
exists: false
|
|
173761
|
+
});
|
|
173762
|
+
}
|
|
173763
|
+
const stat = fs5.statSync(resolvedPath);
|
|
173764
|
+
if (!stat.isFile()) {
|
|
173765
|
+
return c.json({ error: "Path is not a file" }, 400);
|
|
173766
|
+
}
|
|
173767
|
+
return c.json({
|
|
173768
|
+
path: filePath,
|
|
173769
|
+
mtime: stat.mtime.toISOString(),
|
|
173770
|
+
size: stat.size,
|
|
173771
|
+
exists: true
|
|
173772
|
+
});
|
|
173773
|
+
} catch (err) {
|
|
173774
|
+
return c.json({ error: err instanceof Error ? err.message : "Failed to stat file" }, 500);
|
|
173775
|
+
}
|
|
173776
|
+
});
|
|
173737
173777
|
app4.get("/image", (c) => {
|
|
173738
173778
|
const filePath = c.req.query("path");
|
|
173739
173779
|
const root = c.req.query("root");
|