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 +10 -0
- package/package.json +1 -1
- package/server/Routable/Route_table.js +48 -4
- package/server/version_control.js +26 -11
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
|
@@ -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
|
-
|
|
125
|
+
console.log(name, "helo");
|
|
126
|
+
const version = this.versions[this.active_version];
|
|
94
127
|
|
|
95
|
-
|
|
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
|
|
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:
|
|
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
|
-
|
|
215
|
-
|
|
216
|
-
|
|
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
|
-
|
|
222
|
-
return respond(webPrior, res);
|
|
223
|
-
}
|
|
224
|
+
if (callback?.response) return respond(callback.response, res);
|
|
224
225
|
|
|
225
|
-
|
|
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
|
-
|
|
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);
|