godprotocol 2.2.67 → 2.2.70

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "godprotocol",
3
- "version": "2.2.67",
3
+ "version": "2.2.70",
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",
@@ -39,25 +39,52 @@ const applyCors = (req, res) => {
39
39
  };
40
40
 
41
41
  const respond = (result, res) => {
42
+ // ----------------------------
43
+ // REDIRECT
44
+ // ----------------------------
45
+
46
+ if (result?.redirect) {
47
+ const status = result?.status || 302;
48
+
49
+ res.statusCode = status;
50
+ res.setHeader("Location", result.redirect);
51
+
52
+ res.end();
53
+
54
+ return result;
55
+ }
56
+
57
+ // ----------------------------
58
+ // NORMAL JSON RESPONSE
59
+ // ----------------------------
60
+
42
61
  const response = {
43
62
  ok: result?.ok ?? false,
44
63
  message: result?.message ?? "",
45
64
  data: result?.data,
46
65
  };
47
66
 
48
- if (result?.pagination) response.pagination = result.pagination;
49
- if (result?.token) response.token = result.token;
67
+ if (result?.pagination) {
68
+ response.pagination = result.pagination;
69
+ }
70
+
71
+ if (result?.token) {
72
+ response.token = result.token;
73
+ }
50
74
 
51
75
  const status = result?.status || (result?.ok ? 200 : 403);
52
76
 
53
77
  res.statusCode = status;
78
+
54
79
  res.setHeader("Content-Type", "application/json");
80
+
55
81
  res.end(JSON.stringify(response));
56
82
 
57
83
  return response;
58
84
  };
59
85
 
60
86
  const version_middleware = async (req, res, routers) => {
87
+ let error_stage = "Version Middleware";
61
88
  try {
62
89
  applyCors(req, res);
63
90
 
@@ -66,67 +93,80 @@ const version_middleware = async (req, res, routers) => {
66
93
  return res.end();
67
94
  }
68
95
 
69
- const version = req.headers["x-api-version"] || "v1";
96
+ let version;
70
97
 
71
- const versionRouter = routers.get_version(version);
72
- // ----------------------------
73
- // BODY (STREAM PARSE)
74
- // ----------------------------
75
- const body = await getBody(req);
98
+ if (req.method === "GET") {
99
+ version = "__GET__";
100
+ } else {
101
+ version = req.headers["x-api-version"] || "v1";
102
+ }
103
+
104
+ const versionRouter = await routers.get_version(version);
76
105
 
77
106
  if (!versionRouter) {
78
- res.statusCode = 400;
79
- res.setHeader("Content-Type", "application/json");
80
- return res.end(
81
- JSON.stringify({
107
+ return respond(
108
+ {
82
109
  ok: false,
83
110
  message: "Invalid API version",
84
- }),
111
+ status: 400,
112
+ },
113
+ res,
85
114
  );
86
115
  }
87
116
 
117
+ let body = {};
118
+
119
+ if (req.method === "GET") {
120
+ const url = new URL(req.url, `http://${req.headers.host}`);
121
+
122
+ body = Object.fromEntries(url.searchParams.entries());
123
+ } else {
124
+ error_stage = "Body Parser";
125
+ body = await getBody(req);
126
+ }
127
+
88
128
  if (versionRouter.config?.is_old) {
89
129
  req.body = body;
90
130
  return versionRouter.routes(req, res);
91
131
  }
92
132
 
93
133
  const router = routers;
134
+
135
+ // remove query string from route
136
+ const parsedUrl = new URL(req.url, `http://${req.headers.host}`);
137
+ req.url = parsedUrl.pathname;
94
138
  const name = req.url.replace(/^\//, "");
95
139
 
96
140
  const isWebhook = req.headers["is-webhook"];
97
141
 
98
- // ----------------------------
99
142
  // SECURITY
100
- // ----------------------------
143
+ error_stage = "Header";
101
144
  const securityResult = await router.handle_security(name, req);
102
145
 
103
146
  if (securityResult !== true) {
104
147
  return respond(securityResult, res);
105
148
  }
106
149
 
107
- // ----------------------------
108
150
  // DB
109
- // ----------------------------
110
151
  const db = await router.resolve_db(req);
111
152
 
112
- // ----------------------------
113
153
  // WEBHOOK PRIOR
114
- // ----------------------------
115
154
  if (!isWebhook) {
116
- const webPrior = await router.handle_webhook_prior({ ...req, body });
155
+ error_stage = "Callback";
156
+ const webPrior = await router.handle_webhook_prior({
157
+ ...req,
158
+ body,
159
+ });
117
160
 
118
161
  if (!webPrior?.ok) {
119
162
  return respond(webPrior, res);
120
163
  }
121
164
 
122
- if (webPrior?.ok) {
123
- req.headers.webhook_prior = webPrior;
124
- }
165
+ req.headers.webhook_prior = webPrior;
125
166
  }
126
167
 
127
- // ----------------------------
128
168
  // EXECUTE
129
- // ----------------------------
169
+ error_stage = "Handler";
130
170
  const result = await router.execute(name, {
131
171
  body,
132
172
  route: name,
@@ -134,26 +174,26 @@ const version_middleware = async (req, res, routers) => {
134
174
  db: db.db,
135
175
  gp: router.gp,
136
176
  services: router.get_service,
177
+ method: req.method,
137
178
  });
138
179
 
139
- // ----------------------------
140
180
  // WEBHOOK AFTER
141
- // ----------------------------
142
181
  if (!isWebhook) {
182
+ error_stage = "Webhook";
143
183
  await router.handle_webhook_after(req, result);
144
184
  }
145
185
 
146
186
  return respond(result, res);
147
187
  } catch (err) {
148
- console.error("Version Middleware Error:", err);
188
+ console.error(`${error_stage} Error:`, err);
149
189
 
150
- res.statusCode = 500;
151
- res.setHeader("Content-Type", "application/json");
152
- res.end(
153
- JSON.stringify({
190
+ return respond(
191
+ {
154
192
  ok: false,
155
193
  message: "Internal server error",
156
- }),
194
+ status: 500,
195
+ },
196
+ res,
157
197
  );
158
198
  }
159
199
  };