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
|
@@ -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
|
|
251
|
-
this.active_version = version;
|
|
252
|
-
|
|
250
|
+
handle_security = async (name, request, version) => {
|
|
253
251
|
let config;
|
|
254
252
|
if (version === "*") {
|
|
255
|
-
let
|
|
253
|
+
let starVersion = this.versions[version];
|
|
256
254
|
|
|
257
|
-
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
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
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
|
-
|
|
656
|
-
|
|
657
|
-
|
|
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
|
|
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:
|
|
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,
|