godprotocol 2.3.58 → 2.3.60

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
@@ -142,7 +142,7 @@ class GodProtocol {
142
142
  await version_middleware(req, res, this.route_table);
143
143
  };
144
144
 
145
- callback({ before, after } = {}) {
145
+ callback({ before, after, error } = {}) {
146
146
  if (before) {
147
147
  this.route_table.before(before);
148
148
  }
@@ -150,6 +150,10 @@ class GodProtocol {
150
150
  if (after) {
151
151
  this.route_table.after(after);
152
152
  }
153
+
154
+ if (error) {
155
+ this.route_table.error(error);
156
+ }
153
157
  }
154
158
  }
155
159
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "godprotocol",
3
- "version": "2.3.58",
3
+ "version": "2.3.60",
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",
@@ -247,20 +247,17 @@ class Headers extends Services {
247
247
  return requirements.every((r) => checks[r]?.());
248
248
  };
249
249
 
250
- handle_security = async (name, request, version = this.active_version) => {
251
- this.active_version = version;
252
-
250
+ handle_security = async (name, request, version) => {
253
251
  let config;
254
252
  if (version === "*") {
255
- let version = this.versions[version];
253
+ let starVersion = this.versions[version];
256
254
 
257
- config = version.config;
255
+ config = starVersion.config;
258
256
  }
259
257
 
260
258
  let route = await this.get_route(name, version);
261
-
262
259
  if (!route) {
263
- route = await this.get_route("*");
260
+ route = await this.get_route("*", version);
264
261
  }
265
262
  if (!route?.config?.security?.length) return true;
266
263
 
@@ -43,6 +43,7 @@ class Route_table extends Headers {
43
43
 
44
44
  this.before_callbacks = new Array();
45
45
  this.after_callbacks = new Array();
46
+ this.error_callbacks = new Array();
46
47
  this.validators = {};
47
48
  }
48
49
 
@@ -54,6 +55,10 @@ class Route_table extends Headers {
54
55
  this.after_callbacks.push(fn);
55
56
  }
56
57
 
58
+ error(fn) {
59
+ this.error_callbacks.push(fn);
60
+ }
61
+
57
62
  handle_before = async (payload) => {
58
63
  for (const callback of this.before_callbacks) {
59
64
  const result = await callback(payload);
@@ -74,6 +79,14 @@ class Route_table extends Headers {
74
79
  return { ok: true };
75
80
  };
76
81
 
82
+ handle_error_callback = async (payload) => {
83
+ for (const callback of this.error_callbacks) {
84
+ await callback(payload);
85
+ }
86
+
87
+ return { ok: true };
88
+ };
89
+
77
90
  get_version = async (version = this.active_version) => {
78
91
  let resolved_version = version;
79
92
 
@@ -636,12 +649,16 @@ class Route_table extends Headers {
636
649
 
637
650
  if (!resp.ok) {
638
651
  if (this.platform_agent) {
639
- await this.call_agency({
640
- endpoint: name,
641
- args: payload.body,
642
- response: resp,
643
- conversation: payload.headers?.meta?.conversation_id,
644
- });
652
+ await this.call_agency(
653
+ {
654
+ endpoint: name,
655
+ args: payload.body,
656
+ response: resp,
657
+ conversation: payload.headers?.meta?.conversation_id,
658
+ },
659
+ undefined,
660
+ version_name,
661
+ );
645
662
  }
646
663
  return resp;
647
664
  }
@@ -651,11 +668,15 @@ class Route_table extends Headers {
651
668
  let result = await middleware(payload);
652
669
  if (!result?.ok) {
653
670
  if (this.platform_agent) {
654
- await this.call_agency({
655
- endpoint: name,
656
- args: payload.body,
657
- response: result,
658
- });
671
+ await this.call_agency(
672
+ {
673
+ endpoint: name,
674
+ args: payload.body,
675
+ response: result,
676
+ },
677
+ undefined,
678
+ version_name,
679
+ );
659
680
  }
660
681
  return result;
661
682
  }
@@ -670,6 +691,7 @@ class Route_table extends Headers {
670
691
  response,
671
692
  },
672
693
  response.agent,
694
+ version_name,
673
695
  );
674
696
  }
675
697
 
@@ -66,7 +66,7 @@ class Services {
66
66
  };
67
67
 
68
68
  get_service = async (service, opts = {}) => {
69
- let ver = opts?.version || this.active_version;
69
+ let ver = opts?.version;
70
70
  let servic =
71
71
  this.version_services[ver]?.[service] || this.services[service];
72
72
 
@@ -122,8 +122,6 @@ class Services {
122
122
  }
123
123
 
124
124
  try {
125
- let prev_version = this.active_version;
126
-
127
125
  let response = await fetch(
128
126
  `${servic.local ? this.gp.server.domain : servic.url}/${path}`,
129
127
  {
@@ -135,8 +133,6 @@ class Services {
135
133
 
136
134
  let reply = await response.json();
137
135
 
138
- this.get_version(prev_version);
139
-
140
136
  if (typeof reply?.ok !== "boolean") {
141
137
  return {
142
138
  ok: false,
@@ -158,7 +154,6 @@ class Services {
158
154
  };
159
155
 
160
156
  version_db = async (ver) => {
161
- let curr_ver = this.active_version;
162
157
  let version = await this.get_version(ver);
163
158
  if (!version) {
164
159
  let vers = Object.keys(this.versions);
@@ -167,7 +162,7 @@ class Services {
167
162
  let vrr = vers[v];
168
163
 
169
164
  if (vrr.startsWith(`${ver}:`)) {
170
- version = this.get_version(vrr);
165
+ version = await this.get_version(vrr);
171
166
  }
172
167
  }
173
168
  }
@@ -177,8 +172,6 @@ class Services {
177
172
 
178
173
  let db = await this.platform_db();
179
174
 
180
- this.get_version(curr_ver);
181
-
182
175
  return db;
183
176
  };
184
177
 
@@ -377,7 +377,8 @@ const version_middleware = async (req, res, routers) => {
377
377
  req,
378
378
  db: db.db,
379
379
  gp: router.gp,
380
- services: router.get_service,
380
+ services: async (service, opts = {}) =>
381
+ await router.get_service(service, { version, ...opts }),
381
382
  method: req.method,
382
383
  params: {},
383
384
  memory: router.gp.memory,
@@ -405,6 +406,72 @@ const version_middleware = async (req, res, routers) => {
405
406
  } catch (err) {
406
407
  console.error(`${error_stage} Error:`, err);
407
408
 
409
+ try {
410
+ await router.handle_error_callback({
411
+ request_id: req?.request_id,
412
+
413
+ stage: error_stage,
414
+
415
+ timestamp: new Date().toISOString(),
416
+
417
+ error: {
418
+ name: err?.name,
419
+ message: err?.message,
420
+ stack: err?.stack,
421
+ cause: String(err?.cause || ""),
422
+ },
423
+
424
+ request: {
425
+ method: req?.method,
426
+ url: req?.url,
427
+ query,
428
+ body,
429
+ headers: req?.headers,
430
+ ip: req?.headers?.["x-forwarded-for"] || req?.socket?.remoteAddress,
431
+ },
432
+
433
+ routing: {
434
+ version,
435
+ route: name,
436
+ route_pattern: payload?.route_pattern,
437
+ },
438
+
439
+ database: {
440
+ db_name: versionRouter?.db_name,
441
+ db_prefix: versionRouter?.db_prefix,
442
+ },
443
+
444
+ security: {
445
+ passed: securityResult === true,
446
+ },
447
+
448
+ before_hook: {
449
+ response: callback?.response,
450
+ body_modified: !!callback?.body,
451
+ query_modified: !!callback?.query,
452
+ headers_modified: !!callback?.headers,
453
+ route_modified: !!callback?.route,
454
+ db_modified: !!callback?.db,
455
+ },
456
+
457
+ execution: {
458
+ method: payload?.method,
459
+ route: payload?.route,
460
+ params: payload?.params,
461
+ },
462
+
463
+ result: result
464
+ ? {
465
+ ok: result?.ok,
466
+ status: result?.status,
467
+ message: result?.message,
468
+ }
469
+ : null,
470
+ });
471
+ } catch (callbackError) {
472
+ console.error("handle_error_callback failed:", callbackError);
473
+ }
474
+
408
475
  return respond(
409
476
  {
410
477
  ok: false,