godprotocol 2.2.57 → 2.2.59

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.57",
3
+ "version": "2.2.59",
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",
@@ -80,7 +80,11 @@ class Route_table extends Headers {
80
80
  if (type) {
81
81
  if (type.startsWith("/")) {
82
82
  } else {
83
- let type_of = typeof data_value;
83
+ let type_of;
84
+ if (type === "array") {
85
+ type_of = Array.isArray(data_value) ? "array" : typeof data_value;
86
+ } else type_of = typeof data_value;
87
+
84
88
  if (type_of !== type)
85
89
  return {
86
90
  ok: false,
@@ -161,9 +165,9 @@ class Route_table extends Headers {
161
165
  };
162
166
 
163
167
  get_route_config = async (name) => {
164
- let rot = await this.get_route(name);
168
+ let route = await this.get_route(name);
165
169
 
166
- return rot.config;
170
+ return route.config;
167
171
  };
168
172
 
169
173
  // =========================
@@ -189,17 +193,56 @@ class Route_table extends Headers {
189
193
 
190
194
  // debug("Validation result for route", name, ":", resp);
191
195
 
192
- if (!resp.ok) return resp;
196
+ if (!resp.ok) {
197
+ if (this.platform_agent) {
198
+ await this.call_agency({
199
+ endpoint: name,
200
+ args: payload.body,
201
+ response: resp,
202
+ conversation: payload.headers.meta.conversation_id,
203
+ });
204
+ }
205
+ return resp;
206
+ }
193
207
  }
194
208
 
195
209
  // ⚙️ middleware
196
210
  for (let middleware of config.middlewares || []) {
197
211
  let result = await middleware(payload);
198
- if (!result?.ok) return result;
212
+ if (!result?.ok) {
213
+ if (this.platform_agent) {
214
+ await this.call_agency({
215
+ endpoint: name,
216
+ args: payload.body,
217
+ response: resp,
218
+ conversation: payload.headers.meta.conversation_id,
219
+ });
220
+ }
221
+ return result;
222
+ }
199
223
  }
200
224
 
201
225
  // 🎯 handler
202
- return await handler(payload);
226
+ let response = await handler(payload);
227
+ if (response.agent) {
228
+ await this.call_agency(
229
+ {
230
+ endpoint: name,
231
+ args: payload.body,
232
+ response,
233
+ conversation: payload.headers.meta.conversation_id,
234
+ },
235
+ response.agent,
236
+ );
237
+ }
238
+
239
+ return response;
240
+ };
241
+
242
+ call_agency = async (payload, profile = this.platform_agent) => {
243
+ await (
244
+ await this.get_service("agency")
245
+ ).call("response", payload, { profile });
203
246
  };
204
247
  }
205
248
 
@@ -1,91 +1,133 @@
1
- const respond = async (result, res) => {
2
- let response = {
3
- ok: result?.ok,
4
- message: result.message,
5
- data: result.data,
1
+ const getBody = (req) => {
2
+ return new Promise((resolve, reject) => {
3
+ let data = "";
4
+
5
+ req.on("data", (chunk) => {
6
+ data += chunk;
7
+ });
8
+
9
+ req.on("end", () => {
10
+ try {
11
+ const parsed = data ? JSON.parse(data) : {};
12
+ resolve(parsed);
13
+ } catch (err) {
14
+ reject(new Error("Invalid JSON body"));
15
+ }
16
+ });
17
+
18
+ req.on("error", (err) => {
19
+ reject(err);
20
+ });
21
+ });
22
+ };
23
+
24
+ const respond = (result, res) => {
25
+ const response = {
26
+ ok: result?.ok ?? false,
27
+ message: result?.message ?? "",
28
+ data: result?.data,
6
29
  };
7
- if (result.pagination) response.pagination = result.pagination;
8
- if (result.token) response.token = result.token;
9
30
 
10
- if (!res) return response;
31
+ if (result?.pagination) response.pagination = result.pagination;
32
+ if (result?.token) response.token = result.token;
11
33
 
12
- res.status(result?.status || (result?.ok ? 200 : 403)).json(response);
34
+ const status = result?.status || (result?.ok ? 200 : 403);
35
+
36
+ res.statusCode = status;
37
+ res.setHeader("Content-Type", "application/json");
38
+ res.end(JSON.stringify(response));
39
+
40
+ return response;
13
41
  };
14
42
 
15
43
  const version_middleware = async (req, res, routers) => {
16
44
  try {
17
45
  const version = req.headers["x-api-version"] || "v1";
18
46
 
19
- let router = routers.get_version(version);
20
-
21
- if (router.config?.is_old) return router.routes(req, res);
22
-
23
- if (!router) {
24
- return res.status(400).json({
25
- error: "Invalid API version",
26
- version,
27
- });
47
+ const versionRouter = routers.get_version(version);
48
+ // ----------------------------
49
+ // BODY (STREAM PARSE)
50
+ // ----------------------------
51
+ const body = await getBody(req);
52
+
53
+ if (!versionRouter) {
54
+ res.statusCode = 400;
55
+ return res.end(
56
+ JSON.stringify({
57
+ ok: false,
58
+ error: "Invalid API version",
59
+ version,
60
+ }),
61
+ );
28
62
  }
29
63
 
30
- router = routers;
64
+ if (versionRouter.config?.is_old) {
65
+ req.body = body;
66
+ return versionRouter.routes(req, res);
67
+ }
31
68
 
32
- let name = req.path.slice(1),
33
- result;
69
+ const router = routers;
70
+ const name = req.url.replace(/^\//, "");
34
71
 
35
- try {
36
- result = await router.handle_security(name, req);
37
- // console.log("Security check result:", result);
72
+ const isWebhook = req.headers["is-webhook"];
38
73
 
39
- if (result !== true) {
40
- return await respond(result, res);
41
- }
42
- } catch (err) {
43
- console.error(err);
74
+ // ----------------------------
75
+ // SECURITY
76
+ // ----------------------------
77
+ const securityResult = await router.handle_security(name, req);
44
78
 
45
- throw new Error("Security check failed");
79
+ if (securityResult !== true) {
80
+ return respond(securityResult, res);
46
81
  }
47
82
 
48
- let db = await router.resolve_db(req);
49
- let is_webhook = req.headers["is-webhook"];
83
+ // ----------------------------
84
+ // DB
85
+ // ----------------------------
86
+ const db = await router.resolve_db(req);
50
87
 
51
- // console.log(req.headers);
52
- if (!is_webhook) {
53
- let web_prior = await router.handle_webhook_prior(req);
88
+ // ----------------------------
89
+ // WEBHOOK PRIOR
90
+ // ----------------------------
91
+ if (!isWebhook) {
92
+ const webPrior = await router.handle_webhook_prior(req);
54
93
 
55
- if (web_prior === false) {
56
- } else if (!web_prior?.ok) {
57
- return await respond(web_prior, res);
58
- } else {
59
- req.headers.webhook_prior = web_prior;
94
+ if (webPrior && webPrior.ok === false) {
95
+ return respond(webPrior, res);
60
96
  }
61
- }
62
-
63
- try {
64
- result = await router.execute(name, {
65
- body: req.body,
66
- headers: req.headers,
67
- db: db.db,
68
- gp: router.gp,
69
- services: router.get_service,
70
- });
71
97
 
72
- !is_webhook && (await router.handle_webhook_after(req, result));
73
-
74
- return await respond(result, res);
75
- } catch (err) {
76
- console.error(err);
98
+ if (webPrior?.ok) {
99
+ req.headers.webhook_prior = webPrior;
100
+ }
101
+ }
77
102
 
78
- throw new Error("Route execution failed");
103
+ // ----------------------------
104
+ // EXECUTE
105
+ // ----------------------------
106
+ const result = await router.execute(name, {
107
+ body,
108
+ headers: req.headers,
109
+ db: db.db,
110
+ gp: router.gp,
111
+ services: router.get_service,
112
+ });
113
+
114
+ // ----------------------------
115
+ // WEBHOOK AFTER
116
+ // ----------------------------
117
+ if (!isWebhook) {
118
+ await router.handle_webhook_after(req, result);
79
119
  }
120
+
121
+ return respond(result, res);
80
122
  } catch (err) {
81
123
  console.error("Version Middleware Error:", err);
82
124
 
83
- return (
84
- res &&
85
- res.status(500).json({
125
+ res.statusCode = 500;
126
+ res.end(
127
+ JSON.stringify({
86
128
  ok: false,
87
129
  message: "Internal server error",
88
- })
130
+ }),
89
131
  );
90
132
  }
91
133
  };