godprotocol 2.3.39 → 2.3.40

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.40",
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,20 @@ 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
+
24
35
  get_version = async (version = this.active_version) => {
25
36
  let ver = this.versions[version];
26
37
 
@@ -90,11 +101,21 @@ class Route_table extends Headers {
90
101
  };
91
102
 
92
103
  get_route = async (name) => {
93
- let version = this.versions[this.active_version];
104
+ const version = this.versions[this.active_version];
94
105
 
95
- let route = version.routes[name];
106
+ if (version.routes[name]) {
107
+ return version.routes[name];
108
+ }
109
+
110
+ for (const [pattern, route] of Object.entries(version.routes)) {
111
+ if (pattern.startsWith("^")) {
112
+ if (new RegExp(pattern).test(name)) {
113
+ return route;
114
+ }
115
+ }
116
+ }
96
117
 
97
- return route;
118
+ return null;
98
119
  };
99
120
 
100
121
  getValue = (obj, path) => path.split(".").reduce((o, key) => o?.[key], obj);
@@ -211,19 +211,21 @@ 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,
218
- body,
219
- });
214
+ const callback = await router.handle_before({
215
+ req,
216
+ body,
217
+ route: name,
218
+ db: db.db,
219
+ });
220
220
 
221
- if (!webPrior?.ok) {
222
- return respond(webPrior, res);
223
- }
221
+ if (callback?.response) return respond(callback.response, res);
224
222
 
225
- req.headers.webhook_prior = webPrior;
226
- }
223
+ if (callback?.body) body = callback.body;
224
+
225
+ if (callback?.headers) req.headers = callback.headers;
226
+
227
+ if (callback?.db) db.db = callback.db;
228
+ if (callback?.route) name = callback.route;
227
229
 
228
230
  // EXECUTE
229
231
  error_stage = "Handler";
@@ -242,7 +244,14 @@ const version_middleware = async (req, res, routers) => {
242
244
  // WEBHOOK AFTER
243
245
  if (!isWebhook && version !== "*") {
244
246
  error_stage = "Webhook";
245
- await router.handle_webhook_after(req, result);
247
+
248
+ await router.handle_after({
249
+ req,
250
+ result,
251
+ version,
252
+ route: name,
253
+ db: db.db,
254
+ });
246
255
  }
247
256
 
248
257
  return respond(result, res);