godprotocol 2.3.39 → 2.3.41

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
@@ -141,6 +141,16 @@ class GodProtocol {
141
141
  on_request = async (req, res) => {
142
142
  await version_middleware(req, res, this.route_table);
143
143
  };
144
+
145
+ callback({ before, after } = {}) {
146
+ if (before) {
147
+ this.route_table.before(before);
148
+ }
149
+
150
+ if (after) {
151
+ this.route_table.after(after);
152
+ }
153
+ }
144
154
  }
145
155
 
146
156
  export default GodProtocol;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "godprotocol",
3
- "version": "2.3.39",
3
+ "version": "2.3.41",
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",
@@ -18,9 +18,41 @@ class Route_table extends Headers {
18
18
  this.api_key = gp.api_key;
19
19
  this.platform_uri = gp.platform_uri;
20
20
  this.versions = {};
21
+
22
+ this.before_callbacks = new Array();
23
+ this.after_callbacks = new Array();
21
24
  this.validators = {};
22
25
  }
23
26
 
27
+ before(fn) {
28
+ this.before_callbacks.push(fn);
29
+ }
30
+
31
+ after(fn) {
32
+ this.after_callbacks.push(fn);
33
+ }
34
+
35
+ handle_before = async (payload) => {
36
+ for (const callback of this.before_callbacks) {
37
+ const result = await callback(payload);
38
+
39
+ // allow middleware-style rejection
40
+ if (result && result.ok === false) {
41
+ return result;
42
+ }
43
+ }
44
+
45
+ return { ok: true };
46
+ };
47
+
48
+ handle_after = async (payload, response) => {
49
+ for (const callback of this.after_callbacks) {
50
+ await callback(payload, response);
51
+ }
52
+
53
+ return { ok: true };
54
+ };
55
+
24
56
  get_version = async (version = this.active_version) => {
25
57
  let ver = this.versions[version];
26
58
 
@@ -90,11 +122,23 @@ class Route_table extends Headers {
90
122
  };
91
123
 
92
124
  get_route = async (name) => {
93
- let version = this.versions[this.active_version];
125
+ console.log(name, "helo");
126
+ const version = this.versions[this.active_version];
94
127
 
95
- let route = version.routes[name];
128
+ if (version.routes[name]) {
129
+ return version.routes[name];
130
+ }
131
+
132
+ for (const [pattern, route] of Object.entries(version.routes)) {
133
+ console.log(pattern);
134
+ if (pattern.startsWith("^")) {
135
+ if (new RegExp(pattern).test(name)) {
136
+ return route;
137
+ }
138
+ }
139
+ }
96
140
 
97
- return route;
141
+ return null;
98
142
  };
99
143
 
100
144
  getValue = (obj, path) => path.split(".").reduce((o, key) => o?.[key], obj);
@@ -311,7 +355,7 @@ class Route_table extends Headers {
311
355
  await this.call_agency({
312
356
  endpoint: name,
313
357
  args: payload.body,
314
- response: resp,
358
+ response: result,
315
359
  // conversation: payload.headers.meta.conversation_id,
316
360
  });
317
361
  }
@@ -211,19 +211,24 @@ const version_middleware = async (req, res, routers) => {
211
211
  const db = await router.resolve_db(req);
212
212
 
213
213
  // WEBHOOK PRIOR
214
- if (!isWebhook && version !== "*") {
215
- error_stage = "Callback";
216
- const webPrior = await router.handle_webhook_prior({
217
- ...req,
214
+ const callback = await router.handle_before(
215
+ {
216
+ req,
218
217
  body,
219
- });
218
+ route: name,
219
+ db: db.db,
220
+ },
221
+ router.gp,
222
+ );
220
223
 
221
- if (!webPrior?.ok) {
222
- return respond(webPrior, res);
223
- }
224
+ if (callback?.response) return respond(callback.response, res);
224
225
 
225
- req.headers.webhook_prior = webPrior;
226
- }
226
+ if (callback?.body) body = callback.body;
227
+
228
+ if (callback?.headers) req.headers = callback.headers;
229
+
230
+ if (callback?.db) db.db = callback.db;
231
+ if (callback?.route) name = callback.route;
227
232
 
228
233
  // EXECUTE
229
234
  error_stage = "Handler";
@@ -242,7 +247,17 @@ const version_middleware = async (req, res, routers) => {
242
247
  // WEBHOOK AFTER
243
248
  if (!isWebhook && version !== "*") {
244
249
  error_stage = "Webhook";
245
- await router.handle_webhook_after(req, result);
250
+
251
+ await router.handle_after(
252
+ {
253
+ req,
254
+ result,
255
+ version,
256
+ route: name,
257
+ db: db.db,
258
+ },
259
+ router.gp,
260
+ );
246
261
  }
247
262
 
248
263
  return respond(result, res);