godprotocol 2.2.70 → 2.2.80

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/Godprotocol.js CHANGED
@@ -5,7 +5,7 @@ class GodProtocol {
5
5
  constructor(config) {
6
6
  this.db_config = config.db_config;
7
7
 
8
- // debug(config, "uhh");
8
+ this.static_path = config.static_path;
9
9
  this.api_key = config.api_key;
10
10
  this.platform_uri = config.platform_uri;
11
11
  this.route_table = new Route_table(this);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "godprotocol",
3
- "version": "2.2.70",
3
+ "version": "2.2.80",
4
4
  "description": "A distributed computing environment for Web 4.0 — integrating AI, decentralisation, and virtual computation.",
5
5
  "main": "Index.js",
6
6
  "type": "module",
@@ -13,6 +13,7 @@ class Route_table extends Headers {
13
13
  super();
14
14
 
15
15
  this.gp = gp;
16
+ this.static_path = gp.static_path;
16
17
  this.db_config = gp.db_config;
17
18
  this.api_key = gp.api_key;
18
19
  this.platform_uri = gp.platform_uri;
@@ -0,0 +1,59 @@
1
+ import path from "path";
2
+ import fs from "fs";
3
+
4
+ const serveStaticFile = (req, res) => {
5
+ try {
6
+ const parsedUrl = new URL(req.url, `http://${req.headers.host}`);
7
+
8
+ let filePath = decodeURIComponent(parsedUrl.pathname);
9
+
10
+ // prevent path traversal attacks
11
+ filePath = filePath.replace(/\.\./g, "");
12
+
13
+ const fullPath = path.join(process.cwd(), filePath);
14
+ console.log(fullPath);
15
+ if (!fs.existsSync(fullPath)) {
16
+ res.statusCode = 404;
17
+ res.setHeader("Content-Type", "application/json");
18
+ return res.end(
19
+ JSON.stringify({
20
+ ok: false,
21
+ message: "File not found",
22
+ }),
23
+ );
24
+ }
25
+
26
+ const stream = fs.createReadStream(fullPath);
27
+
28
+ // basic content type handling
29
+ const ext = path.extname(fullPath);
30
+
31
+ const mimeTypes = {
32
+ ".pdf": "application/pdf",
33
+ ".docx":
34
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
35
+ ".json": "application/json",
36
+ ".txt": "text/plain",
37
+ };
38
+
39
+ res.statusCode = 200;
40
+ res.setHeader("Content-Type", mimeTypes[ext] || "application/octet-stream");
41
+
42
+ stream.pipe(res);
43
+ return true;
44
+ } catch (err) {
45
+ console.error("Static file error:", err);
46
+
47
+ res.statusCode = 500;
48
+ res.end(
49
+ JSON.stringify({
50
+ ok: false,
51
+ message: "Failed to serve file",
52
+ }),
53
+ );
54
+
55
+ return true;
56
+ }
57
+ };
58
+
59
+ export default serveStaticFile;
@@ -1,3 +1,5 @@
1
+ import serveStaticFile from "godprotocol/server/serve_static_file.js";
2
+
1
3
  const getBody = (req) => {
2
4
  return new Promise((resolve, reject) => {
3
5
  let data = "";
@@ -94,8 +96,16 @@ const version_middleware = async (req, res, routers) => {
94
96
  }
95
97
 
96
98
  let version;
97
-
98
99
  if (req.method === "GET") {
100
+ const parsedUrl = new URL(req.url, `http://${req.headers.host}`);
101
+
102
+ const pathname = parsedUrl.pathname;
103
+
104
+ // STATIC ROUTE DETECTION
105
+ if (routers.static_path && pathname.startsWith(routers.static_path)) {
106
+ return serveStaticFile(req, res);
107
+ }
108
+
99
109
  version = "__GET__";
100
110
  } else {
101
111
  version = req.headers["x-api-version"] || "v1";